命名空间
变体
操作

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

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
TriviallyCopyable(可平凡复制)
(C++11)
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
随机数
并发
(C++11)
Ranges
多维视图
其他

 

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

目录

[编辑] 要求

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

[编辑] 注意

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

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

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

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

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

[编辑] 参阅

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