什么是右值?
在c++中有左值和右值的概念。通常来说,能够出现在 ”=“ 左边的,有名称的,可以寻址的我们称之为左值,不能出现在 ”=“ 左边的,没有名称的值我们称之为右值。
举几个栗子:
int a=5; //a是一个int型变量,是左值
//5是一个右值
char *c="hello world"; //c是一个左值, ”hello world“是一个右值
int func() //非引用的返回值都是右值
{
return 0;
}
什么是右值引用?
c++中存在引用,我们平常敲代码时可能用的比较多的引用就是形如下面这种:
int a=5;
int &b=a; //定义一个a的引用(需要注意的是,引用必须在定义时初始化)
因为a是一个左值,所以这种引用也被称为左值引用,b即是a的一个别名。右值引用即如下所示:
int && a=5; //右值引用
值得注意的是,我们无法用一个右值来初始化左值引用,除非是通过 const修饰 的常量左值引用:
int func()
{
return 0;
}
int main(){
int &a = 5; //用右值初始化左值引用,编译不通过
int &b = func(); //同上
const int &c=5; //编译通过
const int &d=func(); //编译通过
int && e=func(); //编译通过
}