int z = 2;
z = z++;
cout<<z;//輸出仍爲2
在codeblocks、dev c++中輸出是2
在VC中輸出是3
這是爲什麼?
答案:不同編譯器對後綴++運算符的實現不一樣。
簡潔地回答一下:
若a=2;
a++ 是創建一個副本a’=2,a加1,返回副本a’。
++a 是a加1,返回a。
所以在 z=z++時,++運算符的優先級比=高,先執行++運算符要做的事。
先創建z’=2,z加1爲3,準備返回副本z’。後綴++已經執行完了,這時只執行=,使值爲3的z被賦值z’,最終z=2!
不同編譯器對於++的實現是不同的,使它要做的事也不同。VC中,是沒有創建副本z’,先執行賦值語句,再自增1。所以會不同,這是不同編譯器的原因。