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) |
检查类型是否为可平凡复制类型 (类模板) |