C++ 具名要求:可平凡复制 (TriviallyCopyable)
来自cppreference.com
注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。
要求
下列类型统称为可平凡复制类型:
- 标量类型
- 可平凡复制类类型,即满足下列条件的类类型:
- 可平凡复制 (TriviallyCopyable) 对象的数组
注解
|
一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符是合格的当且仅当它不是弃置的。 |
(C++20 前) |
一般来说,对于任何可平凡复制类型 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++ 标准。
| DR | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| CWG 1734 | C++11 | 拥有弃置的非平凡赋值的 C++03 POD 不是平凡的 | 允许弃置的构造函数/运算符 |
| CWG 2094 | C++11 | volatile 标量类型非可平凡复制( CWG 1746 ) | 使之为可平凡复制 |
参阅
| (C++11) |
检查类型是否可平凡复制 (类模板) |