C++左值与右值

在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);  //将左值转变为右值编译通过

 

 

 

 

posted @ 2019-10-29 16:58  尘归风  阅读(307)  评论(0)    收藏  举报