跳到主要内容

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

指定该类型的实例可以通过给定分配器进行原地复制构造。

要求

如果类型 TMoveInsertable 到容器 X(其 value_type 与 T 相同)中,则 TCopyInsertableX 中,并且,给定

  • A 分配器类型
  • m A 类型的左值
  • p 容器准备的 T* 类型指针
  • 类型为(可能 constT 的表达式 v,其中 X::allocator_typestd::allocator_traits<A>::rebind_alloc<T> 相同,

以下表达式格式良好

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

并且在求值后,*p 的值等价于 v 的值。v 的值不变。

如果 X 不是分配器感知型或不是 std::basic_string 特化,则该术语的定义等同于 Astd::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 纠正,以匹配现有实践。

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

指定该类型的实例可以通过给定分配器进行原地复制构造。

要求

如果类型 TMoveInsertable 到容器 X(其 value_type 与 T 相同)中,则 TCopyInsertableX 中,并且,给定

  • A 分配器类型
  • m A 类型的左值
  • p 容器准备的 T* 类型指针
  • 类型为(可能 constT 的表达式 v,其中 X::allocator_typestd::allocator_traits<A>::rebind_alloc<T> 相同,

以下表达式格式良好

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

并且在求值后,*p 的值等价于 v 的值。v 的值不变。

如果 X 不是分配器感知型或不是 std::basic_string 特化,则该术语的定义等同于 Astd::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 纠正,以匹配现有实践。