ホームページ >バックエンド開発 >C++ >自己移動代入は C 標準ライブラリの `std::vector` で機能しますか?

自己移動代入は C 標準ライブラリの `std::vector` で機能しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-11 17:23:03214ブラウズ

Does self-move assignment work with `std::vector` in the C   Standard Library?

C 標準ライブラリの自己移動割り当て

C 11 では、標準は、特に標準内で自己移動割り当てに関して一定の保証を提供します。図書館。これらの保証が何を意味するのか調べてみましょう。

C 11 標準のセクション 17.6.4.9 によると、「関数の引数」トピックで、関数の引数が右辺値参照パラメータにバインドされている場合、実装では、この参照が引数に排他的であると想定できます。

これは、の実装内での参照であることを意味します。 std::vector::operator=(vector&& other) の場合、other が prvalue であると想定できます。したがって、other が prvalue の場合、self-move-assignment は実行できません。

発生する可能性があるのは、v がリソースなし (容量ゼロ) になることです。 v の容量がすでにゼロの場合、このアクションは何も行われません。

更新:

最新の作業ドラフト (N4618) では、 MoveAssignable の要件。これは、式 t = rv (rv は右辺値) では、同じオブジェクトを参照していない場合、代入の前に t が rv の値とのみ一致する必要があることを指定します。いずれにせよ、割り当て後の rv の状態は不特定になります。追加の注記でさらに明確にしています:

「t と rv が同じオブジェクトを参照しているかどうかに関係なく、rv はそれを使用しているライブラリ コンポーネントの要件を満たしている必要があります。」

以上が自己移動代入は C 標準ライブラリの `std::vector` で機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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