名前空間
変種
操作

C++ 名前付き要件: DefaultInsertable (C++11以降)

From cppreference.com
 
 
C++ 名前付き要件
 

指定されたアロケータによって、その型のオブジェクトをインプレースでデフォルト構築できることを指定します。

目次

[編集] 要件

以下の型、値、式が与えられた場合

定義
T オブジェクト型
A アロケータ型
X 以下のすべての条件を満たすコンテナ型
  • X::value_typeT と同じである。
  • X::allocator_typeは、std::allocator_traits<A>::rebind_alloc<T>と同じです。
定義
m A の左辺値
p T* のポインタ

std::allocator_traits<A>::construct(m, p)がwell-formedである場合、TXDefaultInsertableです。

[編集] 注意

デフォルトでは、::new((void*)p) T()(C++20まで)std::construct_at(p)(C++20以降)のように、オブジェクトを値初期化します。

値初期化が望ましくない場合(たとえば、オブジェクトがクラス型ではなく、ゼロ埋めが不要な場合)は、カスタムAllocator::constructを提供することで回避できます。

C++23までstd::basic_stringの要素を構築する際にはカスタムconstructが使用されることが要求されていましたが、すべての実装ではデフォルトのメカニズムしか使用されていませんでした。この要件は、既存の実践に合わせるためにP1072R10によって修正されました。

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
N3346 C++11 CopyInsertableMoveInsertableの要件は存在しますが、DefaultInsertableが欠落していました。
存在していましたが、DefaultInsertableは欠落していました。
要件が追加されました。

[編集] 関連項目

DefaultConstructible
CopyInsertable
MoveInsertable
EmplaceConstructible
Erasable
English 日本語 中文(简体) 中文(繁體)