rub*_*nvb 23 c++ type-traits c++11
什么时候会给出不同的答案,这种差异什么时候会有用呢?
R. *_*des 17
前者测试了平凡的可复制属性,用少数几个词来表示类型是memcpy-safe.
一个简单的可复制类是一个类:
- 没有非平凡的拷贝构造函数(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
};
Run Code Online (Sandbox Code Playgroud)