ホームページ >バックエンド開発 >C++ >キューを使用するときに C ストリームの挿入順序が重要なのはなぜですか?

キューを使用するときに C ストリームの挿入順序が重要なのはなぜですか?

DDD
DDDオリジナル
2024-12-18 19:20:11122ブラウズ

Why Does C   Stream Insertion Order Matter When Using Queues?

C ストリームの演算順序を理解する

C ストリーム挿入演算子 (<<) を使用すると、複数の値を順次出力できます。 。ただし、指定されたコードのようにキュー データ構造で使用すると、印刷順序が直観に反するように見えるかもしれません。

コード例と問題:

次のことを考えてください。 code:

myQueue.enqueue('a');
myQueue.enqueue('b');
cout << myQueue.dequeue() << myQueue.dequeue();

このコードは、予期される「ab」の代わりに「ba」を出力します。同様に、次のコード:

myQueue.enqueue('a');
myQueue.enqueue('b');
cout << myQueue.dequeue();
cout << myQueue.dequeue();

は "ba" の代わりに "ab" を印刷します。

理由:

を使用した印刷順序<< C では厳密に定義されていません。コンパイラは、<< の引数を自由に評価できます。

中間表現:

コンパイラーは << を変換します。式を次のような中間表現に変換します。

auto tmp1 = myQueue.dequeue();
auto tmp2 = myQueue.dequeue();
cout << tmp1 << tmp2;

tmp1 と tmp2 の評価順序は指定されていません。コンパイラは、最初に tmp1 を評価し、次に tmp2 を評価するか、またはその逆を選択できます。

結果:

評価の順序は保証されていないため、次を使用した出力順序が決まります。 <<キューがある場合は予測できません。これにより、特に複雑な式や複数の引数を扱う場合、予期しない結果が生じる可能性があります。

結論:

<< を使用する場合評価順序が明確に定義されていないキューやその他のデータ構造では、不確定な結果が生じる可能性があることに注意することが重要です。予測可能な印刷を保証するには、個別の << などの明示的な順序付けメカニズムを使用することをお勧めします。ステートメントまたはシリアル化手法。

以上がキューを使用するときに C ストリームの挿入順序が重要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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