赋值运算符中的序列点

Sequence point in the assignment operator

提问人:andre3312 提问时间:5/5/2016 最后编辑:Communityandre3312 更新时间:5/5/2016 访问量:286

问:

我已经检查了其他一些答案,例如:

赋值运算符中的序列点

未定义的行为和序列点

但我对以下部分仍有一些疑问:

在所有情况下,赋值都是在右操作数和左操作数的值计算之后,在赋值表达式的值计算之前排序的。

我不清楚什么是“赋值表达式的值计算”。它只是(参考第一个链接)“显示”存储在变量中的数字吗?

C++ 赋值运算符 序列点

评论

1赞 Kerrek SB 5/5/2016
想象一下这里,首先计算(“左操作数和右操作数”),然后赋值生效(即更改的值),然后计算赋值表达式的值。h(f() = g());f()g()f()
0赞 andre3312 5/5/2016
还行。我认为(希望)更清楚。我认为当你的 f() 发生变化时,那就是“值计算”的时刻。但为什么最后这段经文是必要的呢?
0赞 M.M 5/5/2016
@andre3312 “值计算”是表达式的值(可以由包含此表达式的另一个表达式查看);对对象的更改称为副作用
0赞 andre3312 5/5/2016
因此,赋值的值计算只是返回可能的另一个表达式的值。这是对的吗?例如,在 a = b + c 中,赋值的值计算将返回 a 的值。
0赞 rozina 5/5/2016
a = b = c + d;我认为第二个赋值中的赋值就是这个例子中的赋值。b

答: 暂无答案