C++左值与右值

我是研究僧i 提交于 2019-12-02 19:14:29

在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址;表达式b+c、函数int func()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名找到它,&(b+c)这样的操作则不会通过编译。

 

1 int &a = 2;       // 左值引用绑定到右值,编译失败
2 
3 int b = 2;        // 非常量左值
4 const int &c = b; // 常量左值引用绑定到非常量左值,编译通过
5 const int d = 2;  // 常量左值
6 const int &e = c; // 常量左值引用绑定到常量左值,编译通过
7 const int &b =2;  // 常量左值引用绑定到右值,编程通过
int a = 1;
int &&r1 = a;             // 编译失败
int &&r2 = std::move(a);  //将左值转变为右值编译通过

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!