[Error] cannot bind non-const lvalue reference of type to an rvalue of type

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

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;

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容