美文网首页
[Error] cannot bind non-const lv

[Error] cannot bind non-const lv

作者: 小阿牛的爸爸 | 来源:发表于2021-11-07 23:08 被阅读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;

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

相关文章

网友评论

      本文标题:[Error] cannot bind non-const lv

      本文链接:https://www.haomeiwen.com/subject/umepzltx.html