首先,区分左值和右值的取别
左值:可以取地址 ,有名字,非临时的变量
eg:变量,函数返回值的引用,const对象
右值:不能取地址,没名字,临时的变量
eg:立即数,函数返回值
传统的左值引用:
int a=10;
int & b=a;//之后可以通过b 修改a的值
但是
int & c=10;
//这个是错误的,因为立即数存放在寄存器上,而不在内存中
const int & c =10;//是可以成功的
等价于:
const int tp=10;//在内存中开辟了临时空间存放10
const int & c = tp;//对临时空间进行引用
左值引用和右值引用作为参数特别是在类的拷贝构造函数中使用
class strVec
{
strVec(const strVec&); //左值引用
//在拷贝构造过程中需要重新开辟空间,进行赋值保存
strVec(strVec&&) //右值引用
//在拷贝构造过程中 可以直接将临时的空间拿来使用 从而避免了重新开辟空间的复杂过程
}