【发布时间】:2015-06-01 13:28:28
【问题描述】:
让我们以特定的复合赋值运算符^= 为例。 This stackoverflow page 表示在评估 ^= 之后可能尚未完成对左操作数的修改,从而使代码 a ^= b ^= a ^= b 未定义行为。但情况似乎并非如此。该标准在 5.17 [expr.ass] 中说
在所有情况下,赋值都是在值计算之后排序的 左右操作数,在计算值之前 赋值表达式。
这句话有两个关键点。 1) 主题 assignment 指的是什么?在我看来,它只是指对左操作数的修改。 2) 赋值表达式的值计算指的是什么? cppreference 说它指的是返回对 modified 对象的引用(强调我的)。
作为结论,在评估^= 之后,左操作数应该已经被修改,这与(大多数)人们的想法相矛盾。我在这里遗漏了什么吗?
【问题讨论】:
标签: c++ assignment-operator sequence-points compound-assignment