const Item_base* operator->() const这里一定要带const吗?

showming 2010-07-02 08:26:17
RT
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jd_wh 2010-08-20
  • 打赏
  • 举报
回复
这帖猪真没人性,up我帖子的都有20分,丫丫的我是0分
cattycat 2010-07-02
  • 打赏
  • 举报
回复
const函数是为了定义const对象时候访问成员函数调用这个。返回const也是为了不会修改对象。
sunnywyg 2010-07-02
  • 打赏
  • 举报
回复
inline bool
compare(const Sales_item &lhs,const Sales_item &rhs)
{
return lhs->book()<rhs->book();
}

因为你调用这个操作符的对象是const的

tjyjx7946358 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jd_wh 的回复:]
const Item_base* operator->() const{……}

第一个const:返回的是一个指针,指针指向const Item_base
第二个const:该方法不会修改所在类的类成员变量的值

第一个是不是需要看情况而定,如果添加了const,那么这个对象的属性值就不可以修改了,而如果你在方法内部要返回的是const型的Item_base,如果没有第一个const修……
[/Quote]
UP
jd_wh 2010-07-02
  • 打赏
  • 举报
回复
const Item_base* operator->() const{……}

第一个const:返回的是一个指针,指针指向const Item_base
第二个const:该方法不会修改所在类的类成员变量的值

第一个是不是需要看情况而定,如果添加了const,那么这个对象的属性值就不可以修改了,而如果你在方法内部要返回的是const型的Item_base,如果没有第一个const修饰符,返回就出问题了,因为非const向const转化是可以的,但是反过来需要const_cast。

第二个最好是添加的,这不仅是一种良好的程序设计风格,也限定了方法的行为,如果你的类被其他人继承,倘若没有const限制,可能子类会对类成员进行修改,这样,你的基类的行为就被破坏了,挺危险的。
pengzhixi 2010-07-02
  • 打赏
  • 举报
回复
如果不修改对象的话就应该用const ,否则如果去掉你定义一个const对象的话,就没办法使用这个运算符了。
bluejays 2010-07-02
  • 打赏
  • 举报
回复
如果没有第二个const,那么const对象将无法使用这个操作符,那可就不太好了
Luyi06292 2010-07-02
  • 打赏
  • 举报
回复
可以不带的~~
bluejays 2010-07-02
  • 打赏
  • 举报
回复
第二个const最好带上,因为这个重载不会修改类成员。
个人认为第一个const不一定需要,要看你的具体情况,有些情况可能反而不能要这个const。
elegant87 2010-07-02
  • 打赏
  • 举报
回复
可以不带的。根据你的需要了

64,317

社区成员

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

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