定义
左值: 指向特定内存的,具有名称的值。拥有相对稳定的内存地址和较长的生命周期。
右值:不指向稳定内存地址的匿名值,生命周期很短,通常是暂时性的。
简单的判断方法:能取地址的是左值,反之则为右值。
举例:x++是右值,++x是左值。
注意:除字符串字面量意外,通常字面量都是一个右值。
左值引用
非常量左值引用只能引用左值,而常量左值引用除了可以引用左值,还能够引用右值。
int &x1 = 7 // 编译错误,非常量左值引用不能引用右值
const int &x2 = 7 // 编译通过,常量左值引用可以引用右值
拷贝构造函数和赋值运算符重载通常情况下形参都是常量左值引用。
右值引用
右值引用
能且只能引用右值。
右值引用可以延长右值的生命周期,减少对象赋值,提升程序性能。
Tips:GCC编译关闭语言优化选项:-fno-elide-c