C++ 命名要求: CopyInsertable (自 C++11 起)
指定该类型的实例可以通过给定分配器进行原地复制构造。
要求
如果类型 T 是MoveInsertable 到容器 X(其 value_type 与 T 相同)中,则 T 为 CopyInsertable 到 X 中,并且,给定
A
分配器类型m
A
类型的左值p
容器准备的T*
类型指针- 类型为(可能 const)T 的表达式
v
,其中 X::allocator_type 与std::allocator_traits<A>::rebind_alloc<T>
相同,
以下表达式格式良好
std::allocator_traits<A>::construct(m, p, v);
并且在求值后,*p
的值等价于 v
的值。v
的值不变。
如果 X 不是分配器感知型或不是 std::basic_string 特化,则该术语的定义等同于 A 是 std::allocator<T>,只是不需要创建分配器对象,并且不会实例化用户定义的 std::allocator 特化。
备注
如果 A 是 std::allocator<T>,那么这将调用 placement-new,如 ::new((void*)p) T(v)
(直到 C++20) std::construct_at(p, v)
(自 C++20 起)
尽管要求在构造 std::basic_string 元素时使用自定义构造直到 C++23,但所有实现都只使用了默认机制。此要求已通过 P1072R10 纠正,以匹配现有实践。