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/