【问题标题】:Is printing of a member pointer to an int defined是否打印指向 int 的成员指针已定义
【发布时间】:2018-01-03 21:06:16
【问题描述】:

假设我有这个代码:

#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

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

【问题讨论】:

    标签: c++ cout member-pointers


    【解决方案1】:

    目前的关键问题是指向成员的指针无法转换为void*,这是通常处理打印指针的重载所需要的。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 哦....有道理(我刚刚意识到这可能就像你回答的那样)
      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 2018-03-24
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 2013-05-02
      相关资源
      最近更新 更多