24

这些什么时候会给出不同的答案,如果有的话,这种差异什么时候有用?

4

1 回答 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 回答