跳到主要内容

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

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

要求

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

备注

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

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

只要没有访问存活的 volatile 对象,底层字节可以通过 std::memcpystd::memmove 复制。

缺陷报告

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

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

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

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

要求

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

备注

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

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

只要没有访问存活的 volatile 对象,底层字节可以通过 std::memcpystd::memmove 复制。

缺陷报告

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

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