如果我们将std :: cout应用于指向成员的指针,我们将获得什么值

5 c++ pointers

我们可以通过应用获得位于内存中的对象的地址表示

std::cout << &obj << std::endl
Run Code Online (Sandbox Code Playgroud)

我试图用指向成员的类型做同样的事情.

#include <iostream>

using namespace std;
struct X
{
    bool b;
    int a;
};
int X::* a =&X::a;
bool X::* b = &X::b;
X x;

int main()
{
    cout << a << endl << b; //1
                            //1
}
Run Code Online (Sandbox Code Playgroud)

DEMO

你看我收到了1.什么是1?或者我必须提到一个pointer-to-member只是一个不直接绑定到"just"指针的类型?

Bri*_*ian 7

由于没有重载,operator<<因此直接指向成员的指针,ab隐式转换为bool存在重载的指针.此标准转换的语义如下:

算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为类型的prvalue bool.将零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.

因此a,b两者都成了true,因此印刷的价值1.

  • You were faster, have a +1 (3认同)