class Foo {
    public:
    int a = 1;
    int b = 2;
};

int main() {
    Foo foo;
    cout << &Foo::a << endl;//output 1
    cout << &Foo::b << endl;//also output 1
}

众所周知,指向成员数据的指针应指出相对于对象起始地址的相对偏移量,但是如示例所示,指向Foo::a和Foo::b的两个指针均获得1。谁能解释这里发生了什么?

最佳答案

首先,不需要将指向成员的指针实现为距“对象的起始地址”的偏移量(该概念不属于语言标准)。确实,某些类型的成员指针无法像这样实现。

相反,您所看到的只是basic_ostream::operator<<(bool)。指向成员的指针不能隐式转换为许多其他类型,但是可以将它们转换为bool。您看到的1只是表明您已传递了非null成员指针。

关于c++ - 关于C++中指向数据成员的指针的一些困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48138463/

10-11 22:08
查看更多