首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求值顺序点解决方法

2012-05-03 
求值顺序点C/C++ codeint a 3int b (++a) + (++a)coutbendlaendl对于这一段代码,我之前一

求值顺序点

C/C++ code
    int a = 3;    int b = (++a) + (++a);    cout<<b<<endl<<a<<endl;

对于这一段代码,我之前一直认为结果是b=10,a=5,因为两个++a先自增再参与运算,自增两次后变为5,所以b=5+5。后来看了对于求值顺序点的解释,突然觉得以前的想法是错误的,因为++a和加号操作符都没有求值顺序点,所以++a两次所造成的副作用并没有生效,那么b的实际结果应该是b=3+3=6,a的值比较迷惑,但是实际运行结果b=10,a=5,所以感觉到很迷惑,是我关于求值顺序点的理解错了么?请大家指点一下,多谢。

[解决办法]
探讨
引用:
你都知道了求职顺序点,那为什么不知道这个是未定义行为?
还在探究这个的结果?

因为我觉得这里未定义的行为是指对a的结果的影响,因为改变了两次,但是我觉得对b的影响应该不属于未定义行为,b应该等于6才对,对于结果是10比较迷惑,这种代码在实际情况中我也会尽力避免。

[解决办法]
探讨

没有求值顺序点的意思不是对环境的改变没有生效么?那int b = (++a) + (++a);两个++a子表达式运算之后a的结果并没有受到影响,所以+号左右不都应该是3么?

热点排行