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