304 字
2 分钟
04.左值引用和右值引用
左值引用和右值引用
左值:可以修改的值,持久化的值
右值:不可被修改的值,或者即将消亡的值。
一个赋值语句可以看作两个部分:
- 等式左边为变量
- 等式右边为表达式,表达式具有值。
表达式可以分为左值表达式和右值表达式。
int func(){ return 0;}
int a = 10; // 字面量10为右值
int &b = a; // a 为左值表达式
int && m = 10; // 字面量10,为右值表达式
int && m = func(); // 函数返回一个临时值,因此为右值表达式
int &c = 10; // 不能用左值引用绑定右值表达式。
函数的返回值可以是左值,也可以是右值(具体情况具体分析)。
移动语义和完美转发(C++11特性)
右值引用时为了支持移动语义,允许我们在对象(如:函数的返回值)被销毁前使用其资源,而不是拷贝一份,以显著提高性能。
完美转发:将参数原封不动地传递给另外一个函数,无论是左值还是右值。可以使用std::forward()
来实现。