C 標準ライブラリの自己移動割り当て
C 11 では、標準は、特に標準内で自己移動割り当てに関して一定の保証を提供します。図書館。これらの保証が何を意味するのか調べてみましょう。
C 11 標準のセクション 17.6.4.9 によると、「関数の引数」トピックで、関数の引数が右辺値参照パラメータにバインドされている場合、実装では、この参照が引数に排他的であると想定できます。
これは、の実装内での参照であることを意味します。 std::vector
発生する可能性があるのは、v がリソースなし (容量ゼロ) になることです。 v の容量がすでにゼロの場合、このアクションは何も行われません。
更新:
最新の作業ドラフト (N4618) では、 MoveAssignable の要件。これは、式 t = rv (rv は右辺値) では、同じオブジェクトを参照していない場合、代入の前に t が rv の値とのみ一致する必要があることを指定します。いずれにせよ、割り当て後の rv の状態は不特定になります。追加の注記でさらに明確にしています:
「t と rv が同じオブジェクトを参照しているかどうかに関係なく、rv はそれを使用しているライブラリ コンポーネントの要件を満たしている必要があります。」
以上が自己移動代入は C 標準ライブラリの `std::vector` で機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。