左值与右值

C++11之前:

  • 可以取地址的、有名字的就是左值
  • 右值是纯右值,纯右值指的是临时变量值、不跟对象关联的字面量值

C++11及之后:

在C++11中右值又分为纯右值(prvalue,Pure Rvalue)和将亡值(xvalue,eXpiring Value)。

  • 纯右值的概念等同于我们在C++98标准中右值的概念,指的是临时变量和不跟对象关联的字面量值
  • 将亡值则是C++11新增的跟右值引用相关的表达式,这样表达式通常是将要被移动的对象(移为他用),比如返回右值引用T&&的函数返回值、std::move的返回值,或者转换为T&&的类型转换函数的返回值。 将亡值可以理解为通过“盗取”其他变量内存空间的方式获取到的值。

可以取地址的、有名字的就是左值

引用

  • 左值引用就是对一个左值进行引用的类型。
  • 右值引用就是对一个右值进行引用的类型,事实上,由于右值通常不具有名字,我们也只能通过引用的方式找到它的存在。