"names which are not lvalues" 是什么?
What are "names which are not lvalues"?
Effective Modern C++ 的 errata 中有一个条目说
not all names are lvalues
这些名字是什么?具体来说,
- Scott 是指
nullptr
和 this
命名的纯右值吗?
- 还有其他的吗?
- 如果对 1 的回答是是,那么
nullptr
相对于 true
和 false
的特殊之处是什么?它们都是某种类型的值(true
/false
类型 bool
,nullptr
类型 std::nullptr_t
)。毕竟 true
保留为 bool
就像 1
保留为 int
一样,并且 1
不是“不是左值的名称”,是吗?此时我会问 为什么 true
不是名字?
表达式 X
其中 X
是枚举器的名称(例如声明为 enum E { X };
)具有 rvalue 值类别。
与非类型模板参数类似(向@PasserBy 致敬),如
template <int X>
int f() { return X; /* X is an rvalue */}
Effective Modern C++ 的 errata 中有一个条目说
not all names are lvalues
这些名字是什么?具体来说,
- Scott 是指
nullptr
和this
命名的纯右值吗? - 还有其他的吗?
- 如果对 1 的回答是是,那么
nullptr
相对于true
和false
的特殊之处是什么?它们都是某种类型的值(true
/false
类型bool
,nullptr
类型std::nullptr_t
)。毕竟true
保留为bool
就像1
保留为int
一样,并且1
不是“不是左值的名称”,是吗?此时我会问 为什么true
不是名字?
表达式 X
其中 X
是枚举器的名称(例如声明为 enum E { X };
)具有 rvalue 值类别。
与非类型模板参数类似(向@PasserBy 致敬),如
template <int X>
int f() { return X; /* X is an rvalue */}