2017-07-27 42 views
5

假设我有这样的代码:是成员指针为int的印刷定义

#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 

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

回答

12

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

+0

哦....这是有道理的(我刚刚意识到这可能会继续,就像你回答) – DarthRubik

7

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

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

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