关于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/…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理