本帖最后由 fantacyleo 于 2014-7-15 10:49 编辑
你的c++编译器是哪个,vc++还是g++?我用g++编译出来是a=0。在c++中,a=a++这种表达式的语义是未定义的,编译器怎么高兴怎么来。之所以有的c++编译器会出现a=1,是因为a++的运算过程被打断,拆分成了求a++的值和a的值+1:先把a++的值赋值给a(此时为0),然后再把a++对a的+1效果放入内存中(此时a=1)。Java中不允许这种模糊性,a++的运算过程不允许出现这种中断,=右边的表达式计算过程必须全部完成才赋值给左边。java语言规范是这么说的:V is definitely assigned after ++a , --a , a++ , or a-- iff either a is V or V is definitely assigned after the operand expression
|