在本次会议中,Scott Meyers 首先说“左值通常是您可以获取地址的表达式”。我一般都在强调这个词:你不能获取地址的左值是什么?(如果存在)。
编辑:请提供您的答案的代码片段,它使事情更清楚。
我认为位域满足你的条件......我相信f.x
是一个左值,但你不能取它的地址。有趣的是,你也不能这样做auto & x = f.x
。
C++11 Section 8.3.1 Part of Paragraph 4:由于无法获取位域(9.6)的地址,因此指针永远不能指向位域。
struct foo {
int x : 3;
int y : 3;
int z : 3;
};
int main() {
foo f;
f.x = 3;
}
我对这个其他想法更不确定,但标准说你不允许使用main 函数。如果获取 main 的地址正在使用它,那也足够了。C++11 3.6.1 第 5 段。
从我留下的评论中,我知道 TI 扩展了他们的 C 和 C++ 编译器,因此有一个名为的存储类cregister
,您无法获取其地址。(因为它指的是一个物理寄存器,它没有地址的概念)。
您可以从命名符号中获取地址(例如与临时实例)。就我理解这个解释而言,这就是构成左值的原因。