ホームページ >バックエンド開発 >C++ >`cout の出力がなぜ

`cout の出力がなぜ

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-12 15:10:19746ブラウズ

Why is the Output of `cout

cout の未定義の出力 << << a

コード スニペット:

int a = 0;
cout << a++ << a;

では、通常、動作は次と同等であると想定されます:

cout << (a++) << a;

ただし、次の点が欠落しているため、関数の引数評価間のシーケンス ポイントの数に応じて、実行順序は保証されません。コンパイラは std::operator<<<>(std::cout, a ) の前後で a を評価する場合があります。

したがって、正しい解釈は次のとおりです。

cout << ((a++) << a);

これは、インクリメント後の a の値が 2 回目の呼び出しで使用されるため、結果が 未定義 であることを意味します。演算子<<<>.

C 17 修正

C 17 では、ルールが次のように変更されました。

E1 << E2

は次のように評価されます:

std::operator<<<>(std::operator<<<>(E1, E2), E3)

のすべての副作用E1 は E2 よりも前に配列されました。これにより、コード フラグメントが期待どおりの出力「01」を生成するようになります。

以上が`cout の出力がなぜの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。