我们可以通过应用获得位于内存中的对象的地址表示
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)
你看我收到了1.什么是1?或者我必须提到一个pointer-to-member只是一个不直接绑定到"just"指针的类型?
由于没有重载,operator<<因此直接指向成员的指针,a并b隐式转换为bool存在重载的指针.此标准转换的语义如下:
算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为类型的prvalue
bool.将零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.
因此a,b两者都成了true,因此印刷的价值1.