通过限定名访问成员数据的地址会产生错误

正如我们所知,派生类publicprotected成员的直接或间接基类在派生类中可用。

所以我有这个例子:

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 编译了我的程序。

以上是通过限定名访问成员数据的地址会产生错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>