std::queue::pop が値を返さない理由
一見冗長な情報を返しているにもかかわらず、std::queue:: Pop() は、次のような場合の安全性を確保するために、戻り値を意図的に省略しています。
ポップされた要素を参照によって返すという提案された解決策 (myqueue.front() など) では、使用時にコピーを作成する必要があります。一般に移動またはコピー コンストラクターとして知られるこのコピー操作は、例外をスローする可能性があります。
次のシナリオを考えてみましょう:
auto x = myqueue.pop(); // calls the copy constructor of T
T のコピー コンストラクターが失敗した場合、キューの状態は次のようになります。すでに変更されていますが (要素がキューから削除されているなど)、戻り値は生成されません。これにより、キューが矛盾した状態のままになり、ポップされた要素が失われる可能性があります。
さらに、ポップされた値が必要ない場合、参照を返すと効率の問題も発生します。対照的に、std::queue の現在の設計では、要素の削除 (pop()) とその値の検査 (front()) の操作が分離されており、安全性と効率性の両方が提供されます。
以上が`std::queue::pop()` が値を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。