C++ 命名要求: DefaultInsertable (自 C++11 起)
来自 cppreference.com
指定类型实例可以通过给定的分配器在原地进行默认构造。
[编辑] 要求
如果给定:
一个
|
分配器类型 |
m
|
分配器类型 A 的左值 |
p
|
容器准备的类型 T* 指针 |
其中 X::allocator_type
与 std::allocator_traits<A>::rebind_alloc<T> 相同,
则以下表达式是格式良好的
std::allocator_traits<A>::construct(m, p);
如果 X
不是分配器感知的或是一个 std::basic_string 特化,则该术语定义为 A
是 std::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 |