首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我们将std::cout应用到指向成员的指针,我们将收到什么值?

如果我们将std::cout应用到指向成员的指针,我们将收到什么值?
EN

Stack Overflow用户
提问于 2014-09-26 17:20:19
回答 2查看 73关注 0票数 5

应用程序可以获得内存中对象的地址表示形式。

代码语言:javascript
复制
std::cout << &obj << std::endl

我试着用指针到成员类型来做同样的事情。

代码语言:javascript
复制
#include <iostream>

using namespace std;
struct X
{
    bool b;
    int a;
};
int X::* a =&X::a;
bool X::* b = &X::b;
X x;

int main()
{
    cout << a << endl << b; //1
                            //1
}

演示

你看,我收到了1。什么是1?或者我必须提到pointer-to-member只是一种不直接绑定到“公正”指针的类型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-26 17:24:24

由于operator<<没有直接获取指向成员的指针的重载,所以ab被隐式转换为bool,其中存在重载。此标准转换的语义如下:

可以将算术、非作用域枚举、指针或成员类型指针的prvalue转换为bool类型的prvalue。零值、空指针值或空成员指针值转换为false;任何其他值都转换为true

因此,ab都变成了true,因此打印的值是1

票数 7
EN

Stack Overflow用户

发布于 2014-09-26 17:24:52

试试这个:

代码语言:javascript
复制
int main()
{
    cout << std::boolalpha << a << endl << b; //1
}

演示

你会发现你现在变得“真实”了。这只是对bool触发的隐式转换。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26064992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档