命名空间
变体
操作

C++ 命名要求: DefaultInsertable (自 C++11 起)

来自 cppreference.com
 
 
C++ 命名要求
 

指定类型实例可以通过给定的分配器在原地进行默认构造。

[编辑] 要求

如果给定:

一个 分配器类型
m 分配器类型 A 的左值
p 容器准备的类型 T* 指针

其中 X::allocator_typestd::allocator_traits<A>::rebind_alloc<T> 相同,

则以下表达式是格式良好的

std::allocator_traits<A>::construct(m, p);

如果 X 不是分配器感知的或是一个 std::basic_string 特化,则该术语定义为 Astd::allocator<T> 的情况,只是不需要创建分配器对象,并且不会实例化 std::allocator 的用户定义特化。

[编辑] 注释

默认情况下,这将对对象进行 值初始化,就像使用 ::new((void*)p) T()(直到 C++20)std::construct_at(p)(自 C++20 起) 一样。如果值初始化不可取,例如,如果对象是非类类型,并且不需要将它清零,可以通过提供 自定义 Allocator::construct 来避免它。

尽管在 C++23 之前,在构造 std::basic_string 的元素时,需要使用自定义的 construct,但所有实现都只使用默认机制。该要求通过 P1072R10 进行修正,以匹配现有实践。

[编辑] 另请参见

DefaultConstructible
CopyInsertable
MoveInsertable
EmplaceConstructible
Erasable