命名空间
变体
操作

C++ 命名要求: TriviallyCopyable (自 C++11 起)

来自 cppreference.cn
 
 
C++ 命名要求
 

注意:标准没有定义以此名称命名的要求。这是一个由核心语言定义的类型类别。此处将其作为命名要求包含仅是为了保持一致性。

目录

[编辑] 要求

以下类型统称为可平凡复制类型

[编辑] 注释

一般来说,对于任何可平凡复制类型 T 和类型为 T 的对象 obj1obj1 的底层字节可以复制到 charunsigned char数组,或者 std::byte(自 C++17 起) 数组,或复制到 obj2,类型为 T 的不同对象。obj1obj2 都不能是潜在重叠的子对象。

如果 obj1 的底层字节被复制到这样的数组中,然后将结果内容复制回 obj1,则 obj1 将保持其原始值。如果 obj1 的底层字节被复制到 obj2,则 obj2 将保持 obj1 的值。

底层字节可以使用 std::memcpystd::memmove 复制,只要不访问任何存活的 volatile 对象。

[编辑] 缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布行为 正确行为
CWG 1734 C++11 C++03 POD 带有已删除的非平凡赋值不是平凡的 允许删除的构造函数/运算符
CWG 2094 C++11 volatile 标量类型不是可平凡复制的 (CWG 1746) 设为可平凡复制

[编辑] 参见

检查类型是否为可平凡复制的
(类模板) [编辑]