命名空间
变体
操作

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

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
CopyInsertable(可复制插入)
(C++11)
迭代器 (Iterator)
流 I/O
格式化器
随机数
并发
Ranges(范围)
多维视图
其他

 

指定给定分配器可以在原地复制构造类型对象。

[编辑] 要求

给定以下类型、值和表达式

类型 定义
T 一个对象类型
A 一个分配器类型
X 一个满足以下所有条件的容器类型
定义
m 一个类型为 A 的左值
p 一个类型为 T* 的指针
表达式 定义
v 表示类型 T / const T 的左值,或类型 const T 的右值的表达式
expr std::allocator_traits<A>::construct(m, p, v)

如果满足所有以下条件,则 TCopyInsertableX 中:

  • TMoveInsertableX 中。
  • expr 形式良好。
  • 评估 expr 不会改变 v 的值。
  • 评估 expr 后,v 的值等同于 *p

[编辑] 注意

如果 Astd::allocator<T>,则这将调用 placement new,如 ::new((void*)p) T(v)(直至 C++20)std::construct_at(p, v)(自 C++20 起)

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

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 2177 C++11 评估 expr 没有任何后置条件 已添加
LWG 3957 C++11 v 可以表示类型 T 的右值 已排除