【问题标题】:What does a comma mean inside an 'if' statement? [duplicate]'if' 语句中的逗号是什么意思? [复制]
【发布时间】:2019-09-29 08:08:27
【问题描述】:

考虑:

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;

【问题讨论】:

标签: c++


【解决方案1】:

程序员使用comma operator 在单个语句中提供两个不相关的表达式。因为它是单个语句,所以两个表达式都在“内部”if 条件。

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

您的示例不等价;应该是:

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

【讨论】:

  • 天啊,为什么为什么会有人写这段代码。谢谢
  • @Gilad 尝试变得聪明,很有可能!并且失败了。
  • @LightnessRacesinOrbit 这是老派程序员的习惯,因为显示器分辨率小(25 行 80 列),代码写得越短越好。一页上的更多代码更好的可读性。尝试在这样的监视器上阅读现代代码,您将看到其中有多少空行。
  • 当然,这种 hack 对宏特别有用,人们也应该努力避免。
  • @AndreySv 这样的程序员已经有大约 30 年的时间来打破这种习惯了,也就是说,在 C++ 出现之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 2017-11-01
相关资源
最近更新 更多