所谓triviallyCopyable必须满足以下6点要求:
(1) 每一个拷贝构造函数(copy constructor)是trivial
(2) 每一个移动构造函数(move constructor)是trivial
(3) 每个拷贝赋值表达式(copy assignment operator)是trivial
(4) 每一个移动复制表达式(move assignment operator)是rivial
(5) 至少有一个拷贝构造(copy constructor)、移动拷贝(move constructor)、拷贝赋值表达式(copy assignment)、移动赋值(move assignment)是non-deleted
(6) 析构函数是trivial
Trival 是甚麽意思:
Trival Copy Constructor,需要满足以下6个条件才算是Trivial Copy Constructor
(1) 拷贝构造函数不是程序员明确定义的(隐式的或是默认的)
(2) Class T 没有虚拟的成员函数(virtual member function)
(3) Class T没有虚拟基类s
(4) Class T 的直接基类的拷贝构造函数是trivial
(5) Class T 的非静态类成员变量的拷贝构造函数是trivial
(6) Class T 没有非静态的volatile-qualified类型的成员变量
1 | // c++ cppatomic.cpp -o main -std=c++11 |
1 | A: is_trivial: true |