输出 scoped_ptr , 为什么是1?

Longerandlonger 2010-11-25 12:40:14

scoped_ptr<string> pStr(new string("Ding Ding"));
cout << pStr << endl;
...全文
116 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
个人认为是pStr转成bool型然后输出的是bool值
[/Quote]
++
pengzhixi 2010-11-25
  • 打赏
  • 举报
回复
个人认为是pStr转成bool型然后输出的是bool值
gules 2010-11-25
  • 打赏
  • 举报
回复
“怎么理解的?哪有返回bool类型了,返回的是指向类数据成员的指针类型,要么取值0(空指针),要么&this_type::px 成员指针(值为1)。”

LZ,先放放吧,你这会儿迷糊了,过段时间再回头看也许更好些。
Longerandlonger 2010-11-25
  • 打赏
  • 举报
回复

typedef T * this_type::*unspecified_bool_type;

operator unspecified_bool_type() const
{
return px == 0? 0: &this_type::px;
}
// typedef 成 bool_type,而不是 member_ptr ,从命名来看,代码作者的意思就是当成bool的吧
// 另外,cout << pStr , 也是进入这一段代码的。
gules 2010-11-25
  • 打赏
  • 举报
回复
哦,你的意思是指: if(ptr) 这个代码吗?如果是这个,当然是转换为bool型;
如果是 cout<<ptr 那就不是bool了。
gules 2010-11-25
  • 打赏
  • 举报
回复
怎么理解的?哪有返回bool类型了,返回的是指向类数据成员的指针类型,要么取值0(空指针),要么&this_type::px 成员指针(值为1)。
Longerandlonger 2010-11-25
  • 打赏
  • 举报
回复
偏移量是1,这个1当做bool值了,是这个意思吗?
Longerandlonger 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gules 的回复:]
不是!偏移值就是1。
[/Quote]

typedef T * this_type::*unspecified_bool_type;

operator unspecified_bool_type() const // 这就是源码,就是当做bool来用了啊?
{ // if (pStr)也是跳进这里执行的。
return px == 0? 0: &this_type::px;
}
// 这不就是把“指向成员的指针”当做“bool”来用吗?非常不解?


gules 2010-11-25
  • 打赏
  • 举报
回复
不是!偏移值就是1。
Longerandlonger 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gules 的回复:]
上次才给你讲,要你好好学习一下“指向类成员的指针”,这种指针与普通指针不是一回事,它是指在类数据结构中的offset(偏移),找本好书好好看看。
[/Quote]

我知道是偏移量,问题是,这里把偏移量当做bool来用了,是吧?
gules 2010-11-25
  • 打赏
  • 举报
回复
上次才给你讲,要你好好学习一下“指向类成员的指针”,这种指针与普通指针不是一回事,它是指在类数据结构中的offset(偏移),找本好书好好看看。
Longerandlonger 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
个人认为是pStr转成bool型然后输出的是bool值
[/Quote]
对啊,执行到的代码时这个:

typedef T * this_type::*unspecified_bool_type;

operator unspecified_bool_type() const // 返回值是bool吗?
{
return px == 0? 0: &this_type::px;
}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧