乐趣区

关于c++:C右值引用与移动语义

背景

开始学习 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/…

退出移动版