C 標準ライブラリの自己移動割り当て
C 標準ライブラリは、標準で定義されているように、自己移動割り当ての特定の動作を保証します。
具体的には、標準では、型 T&& の引数を持つ標準ライブラリ内の関数について、実装はパラメーターが引数への一意の参照であると想定できると規定されています。これは、標準ライブラリがパラメータが一時的な右辺値であるという仮定に基づいてその動作を最適化できることを意味します。
自己移動代入の場合、実装は引数ベクトルが prvalue であると仮定することができます。これは、引数が左辺値の場合には不可能な最適化を標準ライブラリが実行する可能性があることを意味します。
その結果、標準ライブラリでの自己移動代入により、ベクトルがリソースに残る可能性が高くなります。 -less 状態、容量 0。ベクトルの容量がすでに 0 の場合、自己移動割り当ては何も行われません。
Update
C 標準の最新のドラフトでは、MoveAssignable の要件で、式 t = rv (rv は右辺値) は、t と rv が同じオブジェクトを参照しない場合に、代入前の t が rv と同等であることのみを要求すると明示的に述べています。さらに、割り当て後の rv の状態は不特定です。
以上がC 標準ライブラリのベクトルに対する自己移動代入の影響は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。