0
再一次,一個愚蠢的問題。後綴增量是否在返回值上執行增量?
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i = 0;
i = i++;
cout<<i;
return 0;
}
我得到1
打印了作爲該程序雖然我預期0的結果:第一創建eing等於0的臨時對象,則i遞增,然後臨時對象返回並分配至i。只是根據:
5.2.6遞增和遞減[expr.post.incr] 1所述的通過施加一個後綴++得到 值是值 該操作數施加 操作過的。 [注意:得到的值 是原始 值的副本]
我檢查下MS VC 2008和GCC。他們給出了相同的結果,但至少gcc在增量字符串中發出警告。我錯在哪裏?
您能否提供一個標準的證明鏈接,爲什麼它是未定義的?我猜到了,但沒有找到證據。只有GCC在'-Wall'模式下提供警告。 – flashnik
即使沒有優化和調試模式,結果也是一樣的。 – flashnik
http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points/4176333#4176333 – ybungalobill