C++ 命名要求: TriviallyCopyable (自 C++11 起)
注意:标准没有定义具有此名称的命名要求。这是由核心语言定义的一种类型类别。为了保持一致性,此处将其作为命名要求包含。
要求
以下类型统称为 可平凡复制类型
备注
通常,对于任何可平凡复制类型 T 和 T 的对象 obj1,obj1 的底层字节可以复制到 char
或 unsigned char
数组中,
或者std::byte (自 C++17 起),或者复制到 obj2(T 的另一个不同对象)中。obj1 和 obj2 都不能是潜在重叠的子对象。
如果 obj1 的底层字节被复制到这样的数组中,然后将结果内容复制回 obj1,obj1 将保持其原始值。如果 obj1 的底层字节被复制到 obj2,obj2 将持有 obj1 的值。
只要没有访问存活的 volatile 对象,底层字节可以通过 std::memcpy 或 std::memmove 复制。
缺陷报告
以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布时的行为 | 正确行为 |
---|---|---|---|
CWG 1734 | C++11 | C++03 POD 与已删除的非平凡赋值不再平凡 | 允许删除构造函数/运算符 |
CWG 2094 | C++11 | volatile 标量类型不可平凡复制 (CWG 1746) | 成为可平凡复制类型 |