4

本次会议中,Scott Meyers 首先说“左值通常是您可以获取地址的表达式”。我一般都在强调这个词:你不能获取地址的左值是什么?(如果存在)。

编辑:请提供您的答案的代码片段,它使事情更清楚。

4

2 回答 2

7

我认为位域满足你的条件......我相信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,您无法获取其地址。(因为它指的是一个物理寄存器,它没有地址的概念)。

于 2012-11-08T20:41:37.310 回答
0

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

于 2012-11-08T20:13:44.443 回答