让我们以特定的复合赋值运算符为例^=
。这个stackoverflow页面说在评估之后可能没有对左操作数进行修改,^=
从而使代码a ^= b ^= a ^= b
未定义行为。但情况似乎并非如此。该标准在 5.17 [expr.ass] 中说
在所有情况下,赋值都在左右操作数的值计算之后和赋值表达式的值计算之前进行排序。
这个声明有两个关键点。1) 题目指的是什么?在我看来,它只是指对左操作数的修改。2)赋值表达式的值计算指的是什么?cppreference说它是指返回对修改对象的引用(强调我的)。
作为结论,左操作数应该在 的评估之后已经被修改^=
,这与(大多数)人们的想法相矛盾。我在这里错过了什么吗?