c++自增问题

发布时间:2024-05-28 06:23 发布:上海旅游网

问题描述:

int a=1;
a=(++a)+(++a)+(++a);
cout<<a<<endl;

结果我以为是9 而运行是10,为什么会是10?

想了半天还是没明白
我以为是 2+3+4
结果是2+4+4 我只用1个++a是2 用两个是6,第二个++为什么是4

呵呵,二楼的,我没有写这样的代码,是教材上叫弄懂自增自减的程序

问题解答:

不同的编译器, 运算时候左右顺序不同,所以结果会不同。
a=(++a)+(++a) 结果是6 第一个++a先运算,a变成2,在执行第二个++a时候,a变成3,但是此时前面一个a也变成3了,也就是a=a+a, 就是3+3

至于a=(++a)+(++a)+(++a) 第一个++a执行, a=2, 接着第二个++a执行,a=3,此时由于运算从左到右,会执行前两个++a 的结果相加的操作,也就是a=a(3)+a(3)+(++a),此时候要注意,++a和a++都是对a本身的操作,所以第二个++a会影响到一个++a,但是a(3)+a(3)会存到另外一个临时变量中,一般是一个寄存器中,这样就变成a=6+(++a),此时候第三个++a不会再干扰6了,因为6是存在一个单独变量中了,所以执行第三个++a后,a=4, 此时候a=6+4,赋值操作后,a=10了。

你错了。
因为你只有一个int a;也就是说a在内存中放的位置是相同的。那么你的所有操作实际上都是对一个变量。

依据最新的C++标准,这个的输出应该是12。
表达式的值应该是先为每一个++a计算,然后在a+a+a;
是这样的一个过程。

建议你用VC7.1以后的版本做测试。执行不同的标准得出的结果是不同的。我用的是Visual Studio 2008.

不要深究这样的问题
也不要写这样的代码

热点新闻