左值:能通过取地址符(&)得到地址的。(能在内存中明确找到的,例如:一般变量,包括const变量)
右值:不能通过取地址(&)得到地址的,临时存在的。(例如:字面常量、临时变量)
左值引用(&): 能引用左值。(注:const&也能引用右值,但和右值引用有区别)
右值引用(&&):只能引用右值。相当于将右值“固化”,让它一直存在。
例如:int&& a = 1;
a = 2; //正确, "1"被"固化"在内存里,可以赋值了。
不管是什么引用,它本身也是变量,本质上也是指针。
const左值引用与右值引用区别:const&既能引用左值也能引用右值,但是当引用右值时,由于它是const 变量,即被它“固化”后的不能被修改。而右值引用是可以的。
例如:const int& a = 1;
a = 2; //错误,而右值引用是可以的