在下面的例子(試行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