移動元ベクトルは空であることが保証されていますか?
一般に、C 標準は、移動後のオブジェクトの状態について最小限のガイダンスを提供します。彼らはから移動されました。 N3485 17.6.5.15 [lib.types.movedfrom]/1:
C 標準ライブラリで定義された型のオブジェクトは (12.8) から移動される可能性があります。移動操作は、明示的に指定することも、暗黙的に生成することもできます。特に指定がない限り、そのような移動元オブジェクトは、有効ではあるが指定されていない状態に置かれます。
この規定は、ベクターがこの動作の対象となることを排除するものではありませんが、解釈の余地を残しています。
ベクターの特定の動作
ベクターの影響を除外する明示的な標準要件はありません移動元オブジェクトの一般規則による。ただし、ベクターの実装要件を考慮すると、オプションは限られています:
移動コンストラクター:
移動代入演算子:
Case 1 つ:
場合2:
ケース3:
結論:
ベクトルの移動コンストラクターの場合、移動元ベクトルは常に空です。移動代入演算子の場合、移動元ベクトルは通常空ですが、アロケーターに互換性がなく、T が MoveAssignable または MoveInsertable である特定のシナリオでは空にならない場合があります。
以上が移動元の `std::vector` は空であることが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。