*this与this有什么区别?

viplpf 2008-11-18 09:11:48
刚才在看复制赋值操作符,有这么一段话:String & operator= (const String& rhs) { cout<<"fuzhi constructor"<<endl; return *this; }
之前我认为*this代表一个对象,而this代表一个指针,也就是一个地址。但是看了上班这行代码后就迷糊了。若按照我之前的理解,return *this,就是返回一个String类的对象,而这个函数的返回类型应该是String,而不是String &。但是现在却是String &。是不是我之前对*this和this的理解错了?请高手指教。非常感谢
...全文
244 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
viplpf 2008-11-18
  • 打赏
  • 举报
回复
5楼的兄台说的极是!厉害
viplpf 2008-11-18
  • 打赏
  • 举报
回复
现在明白了,其实这个问题的实质是返回对象和返回对象的引用之间区别的问题。这个问题在一下网址上有详细讨论http://topic.csdn.net/t/20050310/11/3839506.html#
感兴趣的朋友可以去看看
yjgx007 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 viplpf 的回复:]
刚才跑了一遍代码,发现返回类型有没有&都可以。这是为什么
[/Quote]
String operator= (const String& rhs) { cout < <"fuzhi constructor" < <endl; return *this; }

这个过程是这样子:
1. 返回时生成一个临时对象String strTmp
2. 临时对象strTmp调用构造器,像这样String strTmp(*this)
3. 如果你的String类已经实现了2.中所描述的构造方式,则进入这个构造函数String::String(String& str) {这里面是构造相关操作,例如:this.realString = str.realString;}
反之,则调用默认的构造器.
4. 注意,返回的是个临时对象,作为下一个赋值的参数引用。像这样:
String str3 = str2 = str1;
str2返回一个临时对象作为参数传给str3
viplpf 2008-11-18
  • 打赏
  • 举报
回复
刚才跑了一遍代码,发现返回类型有没有&都可以。这是为什么
fox000002 2008-11-18
  • 打赏
  • 举报
回复
之前的理解是完全正确的

lz 需要了解一下引用的用法
yjgx007 2008-11-18
  • 打赏
  • 举报
回复
对象(*this)的引用(String&),有什么错吗?
菜牛 2008-11-18
  • 打赏
  • 举报
回复
没错啊,String&返回一个引用,不是指针!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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