C++ 左值与右值

27 阅读1分钟

1基本定义

在C++中左值顾名思义是赋值运算符左边的值,右值是赋值运算符右边的值。

1.1

int x=10;
int y=x+10;
其中x是左值,实际存储在内存中的,有地址的,即可以取地址的&x
10是右值,临时的在内存中是不存储的,是不能取地址的,

2.移动语义

c++11中引入了移动语义,支持右值引用
int&& z=10;
int y=std::move(z);

Student&& ss=std::move(s);
Student stu=std::move(ss); //触发移动构造函数

注意:虽然 z 是右值引用,但它有名字,所以在表达式里表现为 左值

3.函数返回

函数返回中除了返回引用和指针是左值类型,其他都是返回的临时对象右值(栈对象,函数结束作用域结束,栈对象被销毁)。