背景
开始学习C++11和筹备秋招面试时,对右值援用和挪动语义进行的深刻学习,凑巧在面试中又被问到,深刻记录一下。
左值/右值
左值:能够取地址、位于等号右边 -> 有地址的变量
右值:没法取地址、位于等号左边 -> 没有地址的字面值、长期值
两个例子:
int a = 5;
- a->能够通过 & 取地址,位于等号右边,是左值。
- 5位于等号左边,5没法通过 & 取地址,所以5是个右值。
struct A { A(int a = 0) { a_ = a; } int a_;};A a = A();
- a ------------>能够通过&取地址,位于等号右边,是左值
A()-> 长期值,没法通过&取地址,位于等号左边,是右值
左值援用/右值援用
援用的实质是别名。
通过援用批改变量的值,传参时传援用能够防止拷贝。左值援用
右值援用
参考资料
https://zhuanlan.zhihu.com/p/...