Что означает запятая в выражении "если"?

Рассматривать:

for (auto i = 0; i < g.size(); ++i)
    for (auto j = 0; j < g.size(); ++j) if (g[i][j] == 0) dfs(g, i, j), ++regions;
return regions;

Мне не нравится однострочный код Что код выполняет в if()?

Я смущен знаком ",".

Обычно я написал бы это как:

  for (auto i = 0; i < g.size(); ++i)
  {
      for (auto j = 0; j < g.size(); ++j)
      {
          if (g[i][j] == 0)
          {
             dfs(g, i, j)
          }
          ,++regions; // I am not sure what to do here. Inside the "if" scope??
      }
} 
  return regions;

Ответ 1

Программист использовал оператор запятой для предоставления двух несвязанных выражений в одном выражении. Поскольку это одно утверждение, оба выражения находятся "внутри" условия if.

Это плохой хак, который лучше сделать с помощью фактических {} скобок, окружающих два утверждения.

Ваш пример не эквивалентен; так должно быть:

if (g[i][j] == 0) 
{
   dfs(g, i, j);
   ++regions;
}