跳到主要内容

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

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

要求

如果给定以下条件,类型 TDefaultInsertableContainer X 中,其 value_type 与 T 相同:

  • A 分配器类型
  • 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 的元素时使用自定义构造,但所有实现都只使用了默认机制。此要求已通过 P1072R10 进行纠正,以符合现有实践。

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

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

要求

如果给定以下条件,类型 TDefaultInsertableContainer X 中,其 value_type 与 T 相同:

  • A 分配器类型
  • 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 的元素时使用自定义构造,但所有实现都只使用了默认机制。此要求已通过 P1072R10 进行纠正,以符合现有实践。