int i = 0;
s = (i++)*(i++)
printf(“%d”,s);
這個結果應該是多少?我個人分析應該是2,第一個i++使用的是1 然後i的值應該變成2然後第二個i使用的是2 然後i變成3 結果s的值應該是2 但是在vc++6.0的環境下運行結果為什麼是1呢?新手求解。
這個問題問了無數遍,我想這麼告訴你。
就C++語言來說,這個是語言未定義行為,所謂語言未定義行為,就是在語言規范中沒有規定遇到這樣的代碼應該輸出什麼。不同編譯器輸出結果可以不同。根據編譯器實現的機制以及優化的機制,不同的編譯器以它認為合理的方式產生代碼。
就VC++6.0來說,你可以通過反匯編的方式搞清楚它究竟被編譯成了什麼,但是注意,即便相同的編譯器,不同的優化選項和代碼上下文輸出也可能不同。