C++ 具名要求:可平凡复制 (TriviallyCopyable)

来自cppreference.com
< cpp‎ | named req
 
 
C++ 具名要求
基础
类型属性
TriviallyCopyable
(C++11)
库所属
容器
容器元素
(C++11)

迭代器
流 I/O
格式化
(C++20)
随机数
(C++11)    
并发
(C++11)
(C++11)
范围
其他
(C++11)


 

注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。

要求

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

注解

一般来说,对于任何可平凡复制类型 TT 对象 obj1 ,能复制 obj1 的底层字节到 charunsigned charstd::byte (C++17 起) 的数组中,或到 T 的另一不同对象 obj2 中。 obj1obj2 均不可为潜在重叠的子对象。

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

底层字节能由 std::memcpystd::memmove 复制,只要不访问存活的 volatile 对象。

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
CWG 1734 C++11 拥有弃置的非平凡赋值的 C++03 POD 不是平凡的 允许弃置的构造函数/运算符
CWG 2094 C++11 volatile 标量类型非可平凡复制( CWG 1746 ) 使之为可平凡复制

参阅

检查类型是否可平凡复制
(类模板)