5

假设我有这个代码:

#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;
}

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

我得到以下输出

1
1

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

1
2

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

4

2 回答 2

12

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

于 2017-07-27T23:33:07.910 回答
7

手头的关键问题是不能将指向成员的指针转换为void*,这是通常处理打印指针的重载所需要的。

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

如果您尝试打印“普通”指针(而不是指向成员的指针),您将获得一些符合您最初预期的输出。

于 2017-07-27T23:38:20.383 回答