强制类型转换运算符重载函数的返回值

kldeng_05 2008-12-24 07:01:53
《More Effective C++》上的一个例子:

#include<iostream>
#include<string>
using namespace std;

class String
{
public:
class CharProxy //代理类
{
public:
CharProxy(String& str,int index):string(str),CharIndex(index)
{}
operator char() const
{
cout<<string.data[CharIndex]<<endl; //prints 'r'
return string.data[CharIndex];
}
private:
String& string;
int CharIndex;
};
friend class CharProxy;
String(const char *value="")
{
data=new char[strlen(value)+1];
strcpy(data,value);
}
String(const String& rhs)
{
data=new char[strlen(rhs.data)+1];
strcpy(data,rhs.data);
}
CharProxy operator[] (int index) //重载运算符[]
{
return CharProxy(*this,index);
}
private:
char *data;
};

int main()
{
String s1("More");
cout<<s1[2]<<endl; //打印‘r’的ASCII值114而不是‘r’,为什么?

return 0;
};

s1[2]返回CharProxy类型,当与《运算符结合时,应该隐式转换为char型,
调用operator char() const函数,为何打印返回char型值的时候变成char型对应的ASCII值??

谢谢~~
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taifeng123 2008-12-24
  • 打赏
  • 举报
回复
编译器问题,vs2008没有问题
kldeng_05 2008-12-24
  • 打赏
  • 举报
回复
我用的VC 6.0,编译选项也保持默认的。
难不成真是编译器的问题??
jieao111 2008-12-24
  • 打赏
  • 举报
回复
r
r
请按任意键继续. . .
vs2008结果
nullah 2008-12-24
  • 打赏
  • 举报
回复

楼主VS2005下打印的是'r'
kldeng_05 2008-12-24
  • 打赏
  • 举报
回复
另注:
编译器为MS Visual C++6.0

64,646

社区成员

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

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