这些什么时候会给出不同的答案,如果有的话,这种差异什么时候有用?
问问题
4045 次
1 回答
18
前者测试平凡可复制的属性,简而言之,这意味着该类型是memcpy
安全的。
可简单复制的类是这样的类:
— 没有重要的复制构造函数(12.8),
— 没有重要的移动构造函数(12.8),
— 没有非平凡的复制赋值运算符(13.5.3、12.8),
— 没有非平凡的移动赋值运算符(13.5.3、12.8),并且
— 有一个微不足道的析构函数(12.4)。
平凡类是具有平凡默认构造函数(12.1)并且可以平凡复制的类。
[注意:特别是,平凡可复制或平凡的类没有虚函数或虚基类。——尾注]
后者测试一个平凡的复制构造函数的存在,顺便说一句,这是对平凡可复制属性的要求。它基本上意味着该类型的复制构造函数执行按位复制。
类 X 的复制/移动构造函数是微不足道的,如果它不是用户提供的,并且如果
— X 类没有虚函数 (10.3) 和虚基类 (10.1),并且
— 选择复制/移动每个直接基类子对象的构造函数是微不足道的,并且
— 对于 X 的每个类类型(或其数组)的非静态数据成员,选择复制/移动该成员的构造函数是微不足道的;
否则复制/移动构造函数是不平凡的。
很容易制造一种为这些特征提供不同结果的类型:
struct foo {
foo(foo const&) = default; // this is a trivial copy constructor
~foo(); // this is a non-trivial destructor
};
于 2013-05-14T11:48:17.647 回答