如果是C++11之前,右值常常指的是类型转换中产生的临时量、字面值常量,非引用返回值产生的临时变量、运算表达式产生的临时变量等,都是是无法取地址的,这种情况下右值是无法修改的。即使使用引用,也必须是将右值赋给常量引用:
const int & a = 10;
这种情况下也只能获取地址,但没法进行赋值修改(已经声明了const)。
在C++11之后,随着&&右值引用的出现,对右值也进行了扩充,现在的右值包括纯右值(之前的右值)和将亡值。
如果使用右值引用去引用一个右值,那么这个右值是可以被改变的。因为此时右值引用将这个值变成一个将亡值,将亡值被存储在特殊的位置。
int aa = 10; //aa是左值
int && bb = 100; //bb是一个右值引用
int && cc = move(aa); //cc也是一个右值引用,引用对象是使用move将左值aa变成的将亡值。
bb=111; //通过右值引用改变右值
cc=11;
cout<
输出结果为111 11



