T& operator*(){return *this;}与T& operator*() const{return *get();}

sufeng 2003-07-24 10:19:33
有个问题不清楚,问一下,多谢。

T& operator*(){return *this;}
//这里可以返回*this,可是下面为什么不可以一样,必须写成下面的代码,这两个在用的地方有什么区别?

T* p;
T& operator*() const{return *get();}
T* get() const{return p;}

我的理解:第二个加了const,就不能修改自己,所以也就不能同第一种的return *this,而只能返回另外的对象引用。

我不清楚return *this是否产生了一个临时对象,如果是,那么就产生的临时对象必须给const T &,但此时返回的类型是T& ,最终又是如何转换的?
...全文
685 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2003-07-28
  • 打赏
  • 举报
回复
楼上回答正确。
fixopen 2003-07-28
  • 打赏
  • 举报
回复
T& operator*(){...}

T& operator*() const{...}

这两个函数都是返回引用,也就是说,他们是左值。

加上const修饰的, 表明不会修改所属对象的状态。可是,作为一个左值,没有办法保证这一点。所以第二个要求的就更严格一些。如果改成

const T& operator*() const{...}

就可以直接擦作this了。
yjh1982 2003-07-26
  • 打赏
  • 举报
回复
返回引用在目标码中便是返回一个指针
lieyanfriend 2003-07-26
  • 打赏
  • 举报
回复
return *this;并没有产生临时对象,因为你定义的函数返回的引用。
其实this代表的是当前对象的指针,而*this代表当前对象,这就很明显了。return *this;其实就是返回当前对象的引用,而返回引用时是不会产生临时对象的。
以上权充我对你上面的问题的回答吧。
yjh1982 2003-07-25
  • 打赏
  • 举报
回复
return *this是否产生了一个临时对象:函数返回值是参考就没有临时对象;
关于临时对象的最好讨论见
<<深度探索C++对象模型>>
sufeng 2003-07-25
  • 打赏
  • 举报
回复
无法理解"return *this是否产生了一个临时对象:函数返回值是参考就没有临时对象"

是否解释一下。



fangrk 2003-07-24
  • 打赏
  • 举报
回复
up
sufeng 2003-07-24
  • 打赏
  • 举报
回复
晕。

应该是。
CMyClass<T>& operator*(){return *this;}
sufeng 2003-07-24
  • 打赏
  • 举报
回复
T& operator*() const{return ..}
中的const表示这个函数不修改当前的成员,如果return *this也没有修改呀,为什么就不行,糊涂了。
Elminster 2003-07-24
  • 打赏
  • 举报
回复
类型不匹配。const 对象的 this 指针是 const T* ,所以 operator* 返回的类型应该是 const T&。至于返回引用的含义,请参阅 TC++PL 5.5 节。

24,857

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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