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