可以安全地假設在一個非虛擬單繼承類層次結構中(包含或不包含模板)子類和父類的基類指針是相同的?而根類的第一個成員也總是在同一位置(首先暗示第二,但這是我主要關注的)。非虛擬單繼承類層次結構中的基指針一致性
struct parent {
int type_ = 0;
parent(int type):type_(type) {}
};
struct child: parent {
child():parent(1) {}
};
child ch;
printf("parent %p\r\n", &static_cast<parent&>(ch).type_);
printf("child %p\r\n", &static_cast<child&>(ch).type_); // :)
從我的C++ - 福,常識和測試中,它應該是,但我正在尋找一個C++標準兼容的答案來安慰我。 :)
PS:請參閱ideone.com上的代碼。
在'child'的一個實例裏只有'type_'的一個副本,所以當然你可以保證得到相同的地址。我懶得追捕章節和詩歌,但它看起來像這樣。在第一種情況下,'static_cast'給你一個'child'內的明確基類的實例,然後你訪問它的成員。在第二種情況下,'static_cast'是一個no-op;但名稱查找在同一個明確的基類中找到'type_'。 –