2011-05-26 9 views
0

可能性の重複:
Undefined Behavior and Sequence Pointsこの例では未定義の動作が発生していますか?

変数iを2回交換されますが、次の例では、未定義の動作を引き起こすことが起こっていますか?

#include <iostream> 
int main() 
{ 
    int i = 5; 
    std::cout << "before i=" << i << std::endl; 
    ++ i %= 4; 
    std::cout << "after i=" << i << std::endl; 
} 

私が手出力は次のようになります。

before i=5 
after i=2 
+1

あなたは何を期待したのですか? – RedX

+0

@RedX:Schweppes? – ereOn

答えて

7

はい、それは未定義です。代入、%または++にシーケンスポイントはありません。シーケンスポイント内で変数を複数回変更することはできません。コンパイラはこれを評価することができ

++i; 
i = i % 4; 

または

i = i % 4; 
++i; 

(または他の何か)

関連する問題