【发布时间】:2020-11-29 13:14:15
【问题描述】:
Effective Modern C++ 的 errata 中有一个条目说
并非所有名称都是左值
这些名字是什么?具体来说,
- Scott 只是指
nullptr和this命名的prvalues 吗? - 还有其他的吗?
- 如果对 1 的回答是是,那么与
true和false相比,nullptr的特殊之处是什么?它们都是某种类型的值(bool类型的true/false,std::nullptr_t类型的nullptr)。毕竟true停留在bool就像1停留在int一样,而1不是“不是左值的名称”,不是吗?此时我会问为什么true不是名字呢?
【问题讨论】:
-
例如一个枚举器 -
X声明为enum E { X }; -
在过去,“左值”表示可以出现在赋值左侧的名称(同样,“右值”只能出现在右侧)。因此,基本上,任何您无法为其赋值的名称都不是左值。 (注意assign这个词,和initialize不一样;
const int x = 5;初始化x,但是x不是左值,因为不能写@ 987654343@). -
@PeteBecker 不只是一个不可修改的左值吗?
-
@Enrico -- 正如我所说,那是过去的事了。没有不可修改左值的概念,因为根据定义,左值可以出现在赋值的左侧,即它是可修改的。
标签: c++ c++11 types value-categories