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) |
检查类型是否可平凡复制 (类模板) |