int a=0;a=(++a)+(++a)+(++a); VC结果是7,wintc是9 汗。。为什么??

来源:百度知道 编辑:UC知道 时间:2024/06/30 22:53:06
我第一次提问~~各位帮忙了我只有40分 解释清楚的给10分
a=0
a=(++a)+(++a)+(++a);
在TC里 可知执行了三次++a了 第一次a=1 第二次a=2 第三次a=3 所以此时a=3
最好将三个a相加得 a=9

为什么会先算++a呢 这要和运算符的优先级有关了 ++ 和+都是运算符 而++的运算优先级高于+ 所以先算++a 就好比数学中+和*号的区别 我们都是先算* 后算+道理一样 这是别人的回答

不知道7砸算的

http://z.baidu.com/question/106478843.html你和这个人一样的问题...

int i = 3, j = 3;
int x = (++i) + (++i) + (++i);
int y = (j++) + (j++) + (j++);

看到挺多人在争论,这样的表达式值应该是多少?甚至拿出几个不同的编译器来编译运行得到几个不同的结果。对于此题的答案,一句话,The behavior is undefined! 详细解释待我慢慢说来。

大家知道,通常而言,我们写的计算机程序都是从上到下,从左到右依次执行。然而,我只是说通常,因为在编译的过程中,compiler并不仅仅是把source code翻译成binary code就算了,这个过程里面可能还会对代码进行优化,这种优化可能带来的结果是:代码或者表达式evaluation的顺序可能发生变化。这可是一个非常严重的问题,当某个表达式带有side-effect(比如改变了一个变量的值),那么它的执行顺序直接影响到了程序执行的结果。

为了保证程序执行具有确定性的结果,C++标准引入Sequence Point这个概念,按照ISO/IEC的定义:

At certain specified points in the execution sequence called sequence points. All side effects of previous evaluations shall be complete and no side effects of subsequent evaluations shall have taken place.

简而言之,Sequence Point就是这么一个位置,在它之前所有的side effect已经发生,在它之后的所有side effect仍未开始,而两个Sequence Point之间所有的表