【问题标题】:Does the comma operator have to be left-associative?逗号运算符是否必须是左结合的?
【发布时间】:2012-12-10 05:47:12
【问题描述】:

根据this precedence tablecomma operator 是左关联的。也就是说,a, b, c 被解析为(a, b), c。这是必需品吗? a, (b, c) 不会有完全相同的行为吗?

【问题讨论】:

  • 如果abc 是不同的类型,并且每个重载, 返回一个重载, 的类型怎么办? (a,b),ca,(b,c) 不同。
  • 您的评论与@Pubby 的回答有何不同?
  • 不一定。还有,我后来也没来。只是没有刷新页面。
  • @AlexisWilke:你错了。在 C++ 中,未指定函数参数求值的顺序。因此可以按任何顺序对它们进行评估。
  • 为什么它们是等价的?甚至 (a + b) + ca + (b + c) 也不能保证是等价的。 (出于准确性的原因,它们不在浮点运算中,在some exotic number systems 中,它们甚至应该)。

标签: c++ operators expression associativity comma-operator


【解决方案1】:

由于存在可重载的operator,,不,这不是相同的行为。 a, (b, c) 可以调用与 (a, b), c 不同的重载。

【讨论】:

    【解决方案2】:

    逗号运算符具有从左到右的关联性。用逗号分隔的两个表达式从左到右求值。总是计算左操作数,并且在计算右操作数之前完成所有副作用。

    在某些情况下,逗号可以用作分隔符,例如函数参数列表。不要将逗号用作分隔符与用作运算符混淆;两种用途完全不同。

    http://msdn.microsoft.com/en-us/library/zs06xbxh.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2013-04-08
      相关资源
      最近更新 更多