在下面的例子(试行here)编译器如果区分具有相同地址的嵌套对象,该如何区分?
#include <iostream>
using namespace std;
struct a {
struct b {
int b1;
};
b a1;
int a2;
};
int main() {
a test;
test.a1.b1 = 5;
test.a2 = 6;
std::cout<<&test<<" "<<&(test.a1);
// your code goes here
return 0;
}
无论是结构和其结构nestd具有相同的存储器位置。这是有道理的,因为要存储在内存中的第一个元素是嵌套结构的一部分。
证明:0x7ffd895f86e0 0x7ffd895f86e0
我的问题是:如何编译器知道存储什么类型的在这个位置上,是有从跟踪在运行时这些信息的任何开销可以预料?
它知道是因为你写了'struct a'的定义,这使得清楚并且被编译器理解。运行时不需要这些信息。 – nwp
所以你说的a1和测试的位置是一样的 - 但是这与结构a的第一个成员的位置相同,与结构的位置相同。当这样放置时,它仍然是意想不到的? – UKMonkey
编译器实现具有关于如何组织嵌套结构的硬编码知识。 – Peter