跳到主要内容

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

指定该类型的对象可以通过给定分配器在未初始化存储中从给定参数集构造。

要求

如果给定参数 args,类型 T就地构造 到容器 X 中,且 X 的 value_type 与 T 相同,则:

  • A 分配器类型
  • m A 类型的左值
  • p 容器准备的 T* 类型指针
  • args 零个或多个参数

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

以下表达式格式良好

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

如果 X 不支持分配器或是一个 std::basic_string 特化,则该术语的定义如同 A 是 std::allocator<T>,但不需要创建分配器对象,并且不会实例化 std::allocator 的用户定义特化。

备注

尽管在 C++23 之前,构建 std::basic_string 的元素时要求使用自定义构造,但所有实现都只使用了默认机制。此要求已通过 P1072R10 进行更正,以符合现有实践。

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

指定该类型的对象可以通过给定分配器在未初始化存储中从给定参数集构造。

要求

如果给定参数 args,类型 T就地构造 到容器 X 中,且 X 的 value_type 与 T 相同,则:

  • A 分配器类型
  • m A 类型的左值
  • p 容器准备的 T* 类型指针
  • args 零个或多个参数

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

以下表达式格式良好

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

如果 X 不支持分配器或是一个 std::basic_string 特化,则该术语的定义如同 A 是 std::allocator<T>,但不需要创建分配器对象,并且不会实例化 std::allocator 的用户定义特化。

备注

尽管在 C++23 之前,构建 std::basic_string 的元素时要求使用自定义构造,但所有实现都只使用了默认机制。此要求已通过 P1072R10 进行更正,以符合现有实践。