关于返回const的引用:

freshui 2006-11-30 10:23:57
char& word::operator[](int index) const
{
if(index<0 || index>9)
throw "Wrong word index!\n";
else
return data[index];
}


出错:d:\Cpp_works\exem5\digital_network.cpp(63) : error C2440: “return” : 无法从“const char”转换为“char &”
转换丢失限定符

而这个我是参考c++ primer 上的string类的写法写的啊
为什么他可以呢?
...全文
214 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
freshui 2006-12-01
  • 打赏
  • 举报
回复
果然可以了:)
呵呵,希望知道详情
多些两位
todototry 2006-11-30
  • 打赏
  • 举报
回复
明天给你详细的说说
todototry 2006-11-30
  • 打赏
  • 举报
回复
const char& word::operator[](int index) const
{
if(index<0 || index>9)
throw "Wrong word index!\n";
else
return data[index];
}
axx1611 2006-11-30
  • 打赏
  • 举报
回复
说错了 const char &
axx1611 2006-11-30
  • 打赏
  • 举报
回复
那就把你的data定义成mutable:
class word
{
....
mutable char data[];
...
};
不过我搞不清楚你的需求,通常只要返回const char*就可以了啊,否则不怎么合理
freshui 2006-11-30
  • 打赏
  • 举报
回复
类中重载了两个方法:
char& word::operator[](int index) const;
char& word::operator[](int index);

应该不会是你说的哪种情况引起的吧~
下面的那个,强制转换.......
还有别的方法啊?
axx1611 2006-11-30
  • 打赏
  • 举报
回复
还有一种不推荐的方法:
char& word::operator[](int index) const
{
if(index<0 || index>9)
throw "Wrong word index!\n";
else
return const_cast<word *>(this)->data[index];
}
除非有特殊需要才会这么用,而且通常是用mutable定义data而不强转this指针。
axx1611 2006-11-30
  • 打赏
  • 举报
回复
因为你的operator是const的 这么写
char& word::operator[](int index)
{
if(index<0 || index>9)
throw "Wrong word index!\n";
else
return data[index];
}
应该没问题

64,637

社区成员

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

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