在this conference中,斯科特迈耶斯首先说“左手通常是你可以拿地址的表达式”。我一般都在强调这个词:什么是你不能拿地址的左值? (如果存在)。
修改: 请提供您的答案的代码片段,它会使事情变得更加清晰。
答案 0 :(得分:7)
我认为位域满足你的条件......我相信f.x
是一个左值,但是你不能得到它的地址。有趣的是,你也无法做auto & x = f.x
。
C ++ 11第8.3.1节第4段的一部分:由于无法获取位域(9.6)的地址,因此指针永远不会指向位域。 / p>
struct foo {
int x : 3;
int y : 3;
int z : 3;
};
int main() {
foo f;
f.x = 3;
}
我对这个其他想法更不确定,但标准规定你不允许使用主要功能。如果使用main的地址正在使用它,那么这也足够了。 C ++ 11 3.6.1第5段。
从我离开的评论中,我知道TI扩展了他们的C和C ++编译器,因此存在一个名为cregister
的存储类,你无法获取该地址。 (因为它指的是物理寄存器,它没有地址概念)。
答案 1 :(得分:0)
您可以从命名符号中获取地址(例如,与临时实例相对)。就我所理解的这个解释而言,这正是构成左值的原因。