C++ 具名要求:可平凡复制 (TriviallyCopyable)
来自cppreference.com
注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。
要求
下列类型统称为可平凡复制类型:
注解
一般来说,对于任何可平凡复制类型 T 及 T 对象 obj1 ,能复制 obj1 的底层字节到 char 或 unsigned char 或 std::byte (C++17 起) 的数组中,或到 T 的另一不同对象 obj2 中。 obj1 与 obj2 均不可为潜在重叠的子对象。
如果复制 obj1 的底层字节到这种数组中,然后复制结果内容回 obj1 中,那么 obj1 将保有其原值。如果复制 obj1 的底层字节到 obj2 中,那么 obj2 将保有 obj1 的值。
底层字节能由 std::memcpy 或 std::memmove 复制,只要不访问存活的 volatile 对象。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| CWG 1734 | C++11 | 拥有弃置的非平凡赋值的 C++03 POD 不是平凡的 | 允许弃置的构造函数/运算符 |
| CWG 2094 | C++11 | volatile 标量类型非可平凡复制( CWG 1746 ) | 使之为可平凡复制 |
参阅
| (C++11) |
检查类型是否可平凡复制 (类模板) |