左值表达式是具有标识但不能隐式移出的表达式。其中包括由变量名,函数名,内置的取消引用运算符使用的表达式以及引用左值引用的表达式。
典型的左值只是一个名称,但是左值也可以采用其他形式:
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。