通过限定名访问成员数据的地址会产生错误
正如我们所知,派生类public和protected成员的直接或间接基类在派生类中可用。
所以我有这个例子:
struct Foo{int x_ = 10;};
struct Bar : Foo{};
struct FooBar : Bar{
void f()const{
std::cout << &x_ << " : " << x_ << 'n';
std::cout << &Foo::x_ << " : " << Foo::x_ << 'n';
std::cout << &Bar::x_ << " : " << Bar::x_ << 'n';
std::cout << &FooBar::x_ << " : " << FooBar::x_ << 'n';
}
};
int main(){
FooBar fb{};
fb.f();
}
-
当我编译并运行程序时,我得到输出:
0x7ffc2f7ca878 : 10 1 : 10 1 : 10 1 : 10
那么为什么A::x_通过完全限定名称访问成员数据的地址会产生“无效”地址?但是直接访问它(不合格的查找)是可以的。
-
我的程序是否处于未定义行为?
-
我已经使用 GCC 和 CLANG 编译了我的程序。