ホームページ > バックエンド開発 > C++ > なぜ「クート」なのか

なぜ「クート」なのか

Patricia Arquette
リリース: 2024-12-15 14:05:17
オリジナル
206 人が閲覧しました

Why is `cout

未定義の動作: cout について << << a

C では、未定義の動作の概念を理解することが不可欠です。未定義の動作とは、プログラムの動作が C 標準で指定されておらず、予測できない結果が生じる状況を指します。

次のステートメントを考えてみましょう。

cout << a++ << a;
ログイン後にコピー

ここにはシーケンスがあります。インクリメント演算子 ( ) と挿入演算子 (<<) を含む演算の例です。これらの操作を変数 a に適用すると、シーケンス ポイントがないために未定義の動作が発生します。

シーケンス ポイントは、すべての副作用が発生したことをコンパイラが保証するコード内の特定のポイントです。ただし、上記のステートメントでは、a と a の評価の間にシーケンス ポイントがありません。これは、これらの操作が実行される順序が標準で指定されていないことを意味します。

その結果、このステートメントの出力は実装によって異なる可能性があります。場合によっては、出力が「01」になることもあれば、「10」になることもあります。ただし、標準ではどのケースが発生するかは保証されていないため、動作は未定義です。

C 17 Update

C での式の評価を管理するルールに注意することが重要です。 C 17 では、次のルールが << のようなシフト演算子式に適用されます。 >>:

"シフト演算子式 E1>E2 では、E1 のすべての値の計算と副作用は、E2 のすべての値の計算と副作用の前に順序付けされます。 ."

このルールは、元のステートメントの未定義の動作を排除します。 C 17 では、ステートメント cout

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

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