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

`cout の出力がなぜ

Linda Hamilton
リリース: 2024-12-12 15:10:19
オリジナル
680 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート