演算子の優先順位が尊重されていないように見える、奇妙なVS2008C++の問題で立ち往生しています。
私の質問は、これの出力は何ですか?
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
通常、++
は優先され<<
ますよね?または<<
、?よりも高い優先順位を与える関数呼び出しのように見なされ++
ますか?これに対する100%正しい標準的な答えは何ですか?
確認するために、新しい空のプロジェクト(VS2008コンソールアプリ)を作成し、このコードのみをメインに貼り付けました。結果は次のとおりです。
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
ところで、次の例ではまったく同じ結果が得られます。
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
また、リリースで最適化のタイプを変更しても効果はありませんが、最適化を無効にすると、他の構成と同様に「ゼロ1」が出力されます。