今天在进行着代码选择题练习的时候,我忽然看到了这一题。
我左思右想,发现答案应当是(2)+(3)+(4)=9,可我仍然保有着疑惑,因此把代码放到了VS中跑了一遍,得出来的答案却是12。
而当我使用DV C++时,答案却又变成了10。
因此我发现,不同的编译器会有不同的运算方法。在解决这个问题之前,我们可以先来了解何为++i以及i++。
i++ 与 ++i 的主要区别有两个:
1、 i++ 返回原来的值,++i 返回加1后的值。
a=i++,意思则为a=4,但i++仍然=3.
2、 i++ 不能作为左值,而++i 可以。
a=++i,则a=4,++i=4。
对于DV C++,在进行加法运算时,求出了左值和右值后,求出其和,再进行下一步运算。
一开始i=1,++i后,i=2;第二个++i后,i=3;在求出了第一个加号左右两边的运算数字后,编译器将他们放到了存储器之中,这俩个数的位置就是当前的位置,因此3+3=6。对于最后一个++i,i=4,因此6+4=10。
对于VS编译器,是在进行加法之前先将所有++i求出,最后一同进行加法。即++i,++i,++i全部计算得出,再进行最终的加法运算。++i,i=2。++i,i=3。++i,i=4。因此++i=4,三个++i相加因此就是4+4+4=12.
因此我得出,在一般的编写代码中,应当尽量不要采用这种计算方法从而避免带来不必要的计算错误。