左值表达式是具有标识但不能隐式移出的表达式。其中包括由变量名,函数名,内置的取消引用运算符使用的表达式以及引用左值引用的表达式。
典型的左值只是一个名称,但是左值也可以采用其他形式:
struct X { ... };
X x; // x是一个左值
X* px = &x; // px是左值
*px = X{}; // * px也是左值,X {}是右值
X* foo_ptr(); // foo_ptr()是一个prvalue
X& foo_ref(); // foo_ref()是一个左值另外,虽然大多数文字(例如4,'x'等)是prvalues,但是字符串文字是lvalues。