同じ階層に同じ名前とタイプのメンバーを持つ2つのクラスがある場合、基本クラスの変数へのメンバーポインターを作成する「正しい」方法は何ですか。元。
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を出力します。これは私の2つの質問につながります。
C ++標準に関しては、上記の3つの実装すべてが「安全」ですか?
もしそうなら、主流のコンパイラはこれらのいずれかと非互換性がありますか?