このスニペットの理由:
int i = 0;
cout << ++i << " " << ++i;
2 2
代わりに生成し1 2
ますか?
編集:未定義の評価順序に関する回答へのポインターは、この問題を解決しません。cout << ++i << " " << ++i
に変換された場合f (++i, " ", ++i)
、関連するケースは 2 つだけのようです。
- 1 番目のパラメーターは 3 番目のパラメーターの前に評価されます。
f (0, " ", 1)
- 3 番目のパラメーターは、1 番目のパラメーターの前に評価されます。
f (1, " ", 0)
どこ2 2
から来ていますか?
編集:わかりました。「前のシーケンス ポイントと次のシーケンス ポイントの間で、オブジェクトは格納された値を式の評価によって最大 1 回変更する必要があります」。