“ if”语句中的逗号是什么意思?

Gil*_*lad 23 c++

考虑:

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;
Run Code Online (Sandbox Code Playgroud)

我不喜欢一个行代码。代码在中执行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;
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 29

程序员使用逗号运算符在单个语句中提供了两个不相关的表达式。因为这是一条语句,所以两个表达式都在if条件内部。

这是一个很糟糕的技巧,最好用{}围绕两个语句的大括号来完成。

您的示例并不等效。它应该是:

if (g[i][j] == 0) 
{
   dfs(g, i, j);
   ++regions;
}
Run Code Online (Sandbox Code Playgroud)

  • @吉拉德(Gilad)尽量变得聪明!而且失败了。 (8认同)
  • 哦,天哪,为什么为什么有人要编写这段代码呢?谢谢 (7认同)
  • @LightnessRacesinOrbit这是老派程序员的习惯,因为较小的监视器分辨率(25行80列)代码编写得尽可能短。一页上的代码越多,可读性越好。尝试在这种监视器上阅读现代代码,您将看到其中有多少行。 (4认同)
  • 当然,这种破解对宏特别有用,也应该避免这种宏。 (3认同)
  • @AndreySv这样的程序员已经有三十多年的习惯来打破这种习惯了,也就是说,自从C ++出现之前就已经存在了。 (3认同)
  • @doug:尽管代码对我来说完全清晰(因此可以快速回答),但我认为这不是好代码。因此,这两者是不相同的。 (3认同)
  • @AndreySv是的。在C语言中很常见。它不需要大括号。只要习惯了if和谓词的缩进,对于习惯逗号运算符的任何人来说都清晰易读。如今不太常见的做法,因此偷窥者对此并不熟悉。对尽可能多的程序员而言,编写的代码s / b尽可能清晰。在合理范围内。 (2认同)