是否打印了指向int的成员指针

Dar*_*bik 5 c++ cout member-pointers

假设我有这个代码:

#include <iostream>

struct Mine
{
    int a;
    int b;
};


int main()
{

    int Mine::* memberPointerA = &Mine::a;
    int Mine::* memberPointerB = &Mine::b;



    std::cout << memberPointerA;
    std::cout << "\n";
    std::cout << memberPointerB;
}
Run Code Online (Sandbox Code Playgroud)

当我使用Microsoft Visual C++(2015)运行它时

我得到以下输出

1
1
Run Code Online (Sandbox Code Playgroud)

我期望的输出更像是这样的:

1
2
Run Code Online (Sandbox Code Playgroud)

所以这引出了一个问题:这个成员指针的打印是否定义了行为?

120*_*arm 12

从指针到定义的转换bool.由于成员变量指针不是NULL,因此它们评估为true并打印为1.


Bau*_*gen 7

手头的关键问题是指向成员的指针无法转换为void*通常处理打印指针的重载.

因此,使用下一个最佳转换,即转换指针 - > bool.两个指针都不是空指针,因此您可以获得所看到的输出.

如果你尝试打印"普通"指针(而不是指向成员的指针),你会得到一些输出沿着你最初的预期.