一个左值是一个标识非临时性对象的表达式。一个右值是一个标识临时性对象的表达式,或者是一个不与任何对象相联系的值。
vectorarr(3); const int x = 2; int y; ... int z=x+y; string str="foo"; vector *ptr=&arr;
左值引用的声明是通过在某个类型后放置一个符号&来进行的。此时,一个左值引用成为了它所引用的对象的同义词。例如
string str = "hell"; string & rstr = str; rstr +='o'; bool cond=(&str==&rstr);
左值引用用途1:给结构复杂的名称起别名
如
auto & whichList = theLists[ myhash (x,theLists.size())];
if (find(begin(whichList),end(whichList),x)!=end(whichList))
return false;
whichList.push_back(x);
左值引用用途2:范围for循环
for (auto & x : arr)
++x;
左值引用用途3:避免复制
右值引用是通过在某个类型后放置一个符号&&而被声明。右值引用也可以引用一个右值。例如
string str="hell"; string && bad1="hello" string && bad2= str+" "; string && sub=str.substr(0,4)



