移動元の `std::vector` は空であることが保証されていますか?

Susan Sarandon
リリース: 2024-11-18 03:04:02
オリジナル
266 人が閲覧しました

 Is a Moved-From `std::vector` Guaranteed to Be Empty?

移動元ベクトルは空であることが保証されていますか?

一般に、C 標準は、移動後のオブジェクトの状態について最小限のガイダンスを提供します。彼らはから移動されました。 N3485 17.6.5.15 [lib.types.movedfrom]/1:

C 標準ライブラリで定義された型のオブジェクトは (12.8) から移動される可能性があります。移動操作は、明示的に指定することも、暗黙的に生成することもできます。特に指定がない限り、そのような移動元オブジェクトは、有効ではあるが指定されていない状態に置かれます。

この規定は、ベクターがこの動作の対象となることを排除するものではありませんが、解釈の余地を残しています。

ベクターの特定の動作

ベクターの影響を除外する明示的な標準要件はありません移動元オブジェクトの一般規則による。ただし、ベクターの実装要件を考慮すると、オプションは限られています:

移動コンストラクター:

  • 移動コンストラクターは一定の複雑さを持つ必要があります。
  • 唯一のオプションは、ソース ベクトル (v) からリソースを盗んで新しいベクトルを構築し、v を残すことです空。

移動代入演算子:

  • 動作はベクトルのアロケータによって異なります:

Case 1 つ:

場合2:

ケース3:

結論:

ベクトルの移動コンストラクターの場合、移動元ベクトルは常に空です。移動代入演算子の場合、移動元ベクトルは通常空ですが、アロケーターに互換性がなく、T が MoveAssignable または MoveInsertable である特定のシナリオでは空にならない場合があります。

以上が移動元の `std::vector` は空であることが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート