C++ 命名需求: TriviallyCopyable (自 C++11 起)
来自 cppreference.com
注意:标准没有定义具有此名称的命名需求。这是一种由核心语言定义的类型类别。它仅出于一致性才被作为命名需求包含在这里。
内容 |
[编辑] 要求
以下类型统称为可平凡复制类型
[编辑] 注释
通常,对于任何可平凡复制类型 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 复制基础字节,只要没有访问活动易变对象。
[编辑] 缺陷报告
以下更改行为的缺陷报告被追溯应用于之前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
CWG 1734 | C++11 | 带有已删除非平凡赋值的 C++03 POD 不是平凡的 | 允许已删除的构造函数/运算符 |
CWG 2094 | C++11 | 易变标量类型不是可平凡复制的 (CWG 1746) | 使其可平凡复制 |
[编辑] 另请参见
(C++11) |
检查类型是否可平凡复制 (类模板) |