我认为bitfields满足你的条件...我相信f.x是一个左值,但你不能拿它的地址.有趣的是,你也做不到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;
}
Run Code Online (Sandbox Code Playgroud)
我对这个其他想法更不确定,但标准说你不允许使用主要功能.如果使用main的地址正在使用它,那么这也足够了.C++ 11 3.6.1第5段.
从我离开的评论中,我知道TI扩展了他们的C和C++编译器,因此存在一个名为" cregister你不能接受地址"的存储类.(因为它指的是物理寄存器,它没有地址的概念).