C++11中很重要的一个概念就是右值引用,而右值引用的前置知识点就是关于值类型的讨论。
表达式可以根据以下的术语分类:
lvalue, 左值指明一个函数或对象。举例而言,如果E是指针类型的表达式,那么*E就是指向了对象或函数的一个左值。另一个例子是,调用一个返回值是左值的结果依旧是一个左值。
xvalue, 它也指向一个对象,通常已经接近了它生存期的结束。(这样一来,它的资源即将被移动)xvalue是包含了右值引用特定类型表达式的结果。(例子:调用返回值为右值引用的结果是一个xvalue)
glvalue, generalized lvalue, 是指更泛化意义上的左值,包含了以前的一部分右值。即lvalue和xvalue的集合。
rvalue, 可以是一个xvalue, 一个临时对象,或临时对象的子对象,或者是一个没有和对象关联的值。
prvalue, pure right value, 纯右值,即不是xvalue的rvalue (举例:调用函数返回值并不是引用类型的结果是一个纯右值。字面量12.7, 3e5, 或者true, 都是纯右值。)
每个表达式都会严格属于某个基础类型。表达式的这种特性被称为是值分类。
节选自如下文章:
A Taxonomy of Expression Value Categories