关于C++中指向数据成员的指针的一些混淆

J.z*_*hou 1 c++

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
}
Run Code Online (Sandbox Code Playgroud)

我们知道指向成员数据的指针应指出与对象起始地址的相对偏移量,但正如示例所示,指向Foo :: a和Foo :: b的指针都得到了a 1.有人能解释这里发生了什么吗?

Sne*_*tel 6

首先,指向成员的指针不需要实现为与"对象的起始地址"(不是语言标准的一部分的概念)的偏移.事实上,某些类型的成员指针无法像这样实现.

你所看到的只是简单的basic_ostream::operator<<(bool).指向成员的指针不能隐式转换为许多其他类型,但可以将它们转换为bool.在1你看到的仅仅是你通过一个非空成员指针的指示.