+ -
当前位置:首页 → 问答吧 → 为什么赋值操作符有副作用?

为什么赋值操作符有副作用?

时间:2011-12-16

来源:互联网

=,+=,-=,*=,/=

作者: goojnag   发布时间: 2011-12-16

因为要修改左操作数

作者: Demon__Hunter   发布时间: 2011-12-16

《C语言程序设计 现代方法》4.2.3
在极少数情况下,由于v自身的副作用,v+=e也不等同于v=v+e。类似的说明也适用于其他复合赋值运算符。
这句话是什么意思?

作者: goojnag   发布时间: 2011-12-16

如果一个表达式不仅算出一个值,还修改了环境,就说这个表达式有副作用(因为它多做了额外的事)


很明显,你列举的操作都会修改左边的操作数

作者: mingliang1212   发布时间: 2011-12-16

引用 2 楼 goojnag 的回复:
《C语言程序设计 现代方法》4.2.3
在极少数情况下,由于v自身的副作用,v+=e也不等同于v=v+e。类似的说明也适用于其他复合赋值运算符。
这句话是什么意思?


例:当v是下面的(++x)时。

(++x)= (++x) + e;
(++x)+=e;

这种情况下可能不同。但是都是未定义的行为:见下面链接。
http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?34201

作者: mingliang1212   发布时间: 2011-12-16

由于v自身的副作用,v+=e也不等同于v=v+e。
为什么两者不相等?

作者: goojnag   发布时间: 2011-12-16

只要左值被修改就会有副作用, 还有个"序列点"的概念和着也有点关系.

作者: nnrroo   发布时间: 2011-12-16

v+=e中v表达式仅被求值一次
v=v+e。中v求值两次的

作者: Demon__Hunter   发布时间: 2011-12-16

7楼:
一次是什么运算?
两次是什么运算?
详细解释下?

作者: goojnag   发布时间: 2011-12-16