不能采取什么样的LVALUE

Of what kind of lvalues can the address not be taken?

本文关键字:LVALUE 什么样 不能      更新时间:2023-10-16

在这次会议上,斯科特·迈耶斯(Scott Meyers)首先说" lvalues通常是表达方式,您可以取"地址"。我一般都强调这个词:您无法接受地址的LVALUE是什么?(如果存在)。

编辑:请提供您的答案代码片段,这使情况变得更加清晰。

我认为Bitfields满足您的状况...我相信f.x是一个LVALUE,但您不能接受它的地址。有趣的是,您也不能做auto & x = f.x

C 11第8.3.1节第4段:由于无法采用位景(9.6)的地址,因此指针永远不会指向位。<<<<<<<<<<

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 编译器,因此有一个名为cregister的存储类,您无法接受该地址。(因为它是指物理寄存器,没有地址的概念)。

您可以从命名符号(例如与临时实例)中获取地址。这就是构成LVALUE的原因。