当我把一个右值赋给一个左值引用的时候出现了上面的错误。
如下:
Student &student = Student();
解决上面错误有两种方法:
- 在变量名称前增加const
- 使用右值引用
// 在变量名称前增加const
const Student &student = Student();
// 使用右值引用
Student &&student Student();
下面了解一下原理。
1 左值和右值
简单来说,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式)。
常见的右值有临时变量(如上面出现的Student()),字面值('a',1)。
2 左值引用和右值引用
左值引用就是我们常说的引用,为了与右值引用做区分,c++11 特意把之前的引用叫做左值引用。
例如:
int a = 1;
// 常见引用,也叫左值引用
int &b = a;
// c++11新增的右值引用
int &&c = 1;
注意:
常量左值引用比较特殊,它可以绑定非常量左值、常量左值、右值,而且在绑定右值的时候,常量左值引用还可以像右值引用一样将右值的生命期延长,如文章开头提到的示例。
网友评论