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