如果我有两个在同一层次结构中且具有相同名称和类型的成员的类,那么创建指向基类变量的成员指针的“正确”方法是什么。前任。
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++ 标准时,上述所有三个实现都是“安全的”吗?
如果是这样,是否有任何主流编译器与其中任何一个不兼容?