什么样的左值可以不采取地址?

时间:2012-11-08 19:54:18

标签: c++ c++11 lvalue

this conference中,斯科特迈耶斯首先说“左手通常是你可以拿地址的表达式”。我一般都在强调这个词:什么是你不能拿地址的左值? (如果存在)。

修改: 请提供您的答案的代码片段,它会使事情变得更加清晰。

2 个答案:

答案 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)

您可以从命名符号中获取地址(例如,与临时实例相对)。就我所理解的这个解释而言,这正是构成左值的原因。