1
如果我有兩個類與同一名稱和類型的成員在同一層次結構中,那麼創建指向基類變量的成員指針的「正確」方法是什麼?例如,C++指向成員的指針
class A
{
int x;
A():x(1){}
};
class B : public A
{
int x;
B():x(2){}
};
int main(int argc, char *argv[]) {
B classB;
int B::*ptr = &B::x;
int B::*ptr1 = &B::A::x;
int A::*ptr2 = &A::x;
printf("%d,%d,%d\n", classB.*ptr, classB.*ptr1, classB.*ptr2);
return 0;
}
在我的編譯器(LLVM GCC)上,它會打印2,1,1,就像我期望的那樣。這引出了我的兩個問題。
當涉及到C++標準時,上述所有三個實現都是「安全的」嗎?
如果是這樣,是否有任何主流編譯器與其中任何一個不兼容?
你爲什麼不離開B班? 你能解釋爲什麼你需要int x在A類和B類? – santiagoIT 2011-02-28 03:31:25
上面是一個簡化的例子,但這是一個序列化/反射系統,我必須確保它將保留爲任何類型的層次結構,並將其傳遞給它。 – 2011-02-28 03:37:48