问题描述:
为什么 int j=3; cout<<j++*--j*--j<<endl;语句输出结果是j=4
这是我在vc中运行的结果,的确很郁闷,
问题解答:
不知道你想问的是什么,不过说说我看了表达式(j++ * --j * --j)
之后的感觉,我想我快要疯了!!
在正式编程的时候这是绝对不行的
这个表达式的副作用太大了, 因为你无法确定两个--j的
具体值,这两个--j中必定有一个j的值在j++之前等于2,一个为1;
直到最后j才自增1; j++的语义是先取出j的值参与运算然后
在增1, 整个表达式的值确实是4但是不是你所说的j=4;
我看不出这个有用3个副作用点的运算式的计算细节,或许
编译器的编写者能给你解答这个问题
从全局上看,很明显的j的值因该是2,因为j自增了1次而自减了2次
3 + 1 - 2 很简单的加减法
最终 j = 2
我分析的话结果应该是1,应先计算所有的前缀--,计算完后j = 1,然后计算 j*j*j = 1,等语句结束才算++的。
这种问题没有多大意义!
操作符优先级,先计算所有的前缀--,计算完后j = 1,再计算所有后缀++,,这个式子就变为1*2*2 = 4
不过也因编译器不同结果也不同