应用程序可以获得内存中对象的地址表示形式。
std::cout << &obj << std::endl我试着用指针到成员类型来做同样的事情。
#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
}演示
你看,我收到了1。什么是1?或者我必须提到pointer-to-member只是一种不直接绑定到“公正”指针的类型?
发布于 2014-09-26 17:24:24
由于operator<<没有直接获取指向成员的指针的重载,所以a和b被隐式转换为bool,其中存在重载。此标准转换的语义如下:
可以将算术、非作用域枚举、指针或成员类型指针的prvalue转换为
bool类型的prvalue。零值、空指针值或空成员指针值转换为false;任何其他值都转换为true。
因此,a和b都变成了true,因此打印的值是1。
发布于 2014-09-26 17:24:52
试试这个:
int main()
{
cout << std::boolalpha << a << endl << b; //1
}演示
你会发现你现在变得“真实”了。这只是对bool触发的隐式转换。
https://stackoverflow.com/questions/26064992
复制相似问题