左值和右值
左值lvalue:持久存在的值,可在以后获取其地址。
右值rvalue:暂时存在的值。所有字面量是右值。
左值引用:我们平时使用的引用一般都是左值引用&。
右值引用:两个&符号,即&&
std::move():将左值转换成右值
int main()
{
vector<int> a = {2,3};
vector<int> b = move(a);
cout << a[0] << endl; // 报错,一般移动完后就不能再使用这个变量了
return 0;
}
六种特殊的成员函数
默认构造函数
析构函数
副本构造函数
复制赋值运算符
移动构造函数
移动赋值运算符
5的规则:只要声明了除默认构造函数外的5种特殊构造函数中的一种,就应该声明全部5种
1的规则:尽可能避免实现任何特殊成员函数