[Error] cannot bind non-const lv

2021-11-07  本文已影响0人  小阿牛的爸爸

当我把一个右值赋给一个左值引用的时候出现了上面的错误。
如下:

Student &student = Student();

解决上面错误有两种方法:

  1. 在变量名称前增加const
  2. 使用右值引用
// 在变量名称前增加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;

注意:
常量左值引用比较特殊,它可以绑定非常量左值、常量左值、右值,而且在绑定右值的时候,常量左值引用还可以像右值引用一样将右值的生命期延长,如文章开头提到的示例。

上一篇 下一篇

猜你喜欢

热点阅读