输入如下两行代码:
int i=0;
i=i++;
我使用了vs2010(2005同样结果),发现同样的代码C#运行后i值为0,C++运行后i值为1
之后看了反汇编,发现是有区别的。
C++中i++就是书上所说的先使用后自加,没什么问题。
而C#中i++是首先存下了i的副本,然后执行i=i+1;之后计算本行表达式的值,其中的i值用该副本代替。这样在用i++计算表达式再对i赋值时就会把计算前执行的i=i+1过程覆盖掉。
请问这是否是两种语言有所区别?还是说没人定义过i++的具体流程,是编译器决定的?C#中的i++不科学啊
有图有真相: