将成员指针打印为整数是否有定义?

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

这就引出了一个问题:成员指针的打印是否是定义良好的行为?
2个回答

12

指针转换为 bool 有一个明确定义。由于成员变量指针不是 NULL,它们被评估为 true 并打印为 1


哦……这很有道理(我刚意识到你回答时可能正在进行中) - DarthRubik

7
重点问题在于成员指针无法转换为void*,而通常处理打印指针的重载函数需要此类型转换。
因此,使用次佳转换,即指针->bool转换。两个指针都不是空指针,因此输出结果与您看到的相同。
如果尝试打印“普通”指针(而不是成员指针),则会得到类似于最初预期的输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接