《转》return *this和 return this有什么区别?

 

别跟我说 return *this 表示返回当前对象,return this 表示返回当前对象的地址(指向当前对象的指针)。

正确答案为:return *this 返回的是当前对象的克隆或者本身(若返回类型为A,则是克隆,若返回类型为A&,则是本身)

      return this 返回当前对象的地址(指向当前对象的指针),下面我们来看看程序:

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     int x;
 8     A* get()
 9     {
10         return this;
11     }
12 };
13 
14 int main()
15 {
16     A a;
17     a.x = 4;
18 
19     if(&a == a.get())
20     {
21         cout << "yes" << endl;
22     }
23     else
24     {
25         cout << "no" << endl;
26     }
27 
28     return 0;
29 }
复制代码

结果为yes

再看:

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     int x;
 8     A get()
 9     {
10         return *this; //返回当前对象的拷贝
11     }
12 };
13 
14 int main()
15 {
16     A a;
17     a.x = 4;
18 
19     if(a.x == a.get().x)
20     {
21         cout << a.x << endl;
22     }
23     else
24     {
25         cout << "no" << endl;
26     }
27 
28     if(&a == &a.get())
29     {
30         cout << "yes" << endl;
31     }
32     else
33     {
34         cout << "no" << endl;
35     }
36 
37     return 0;
38 }
复制代码

结果为:

4    

no  //可见返回的是当前对象的副本

 

最后,如果返回类型是A&,那么return *this 返回的是当前对象本身(也就是其引用),而非副本

 

转自:https://blog.csdn.net/stpeace/article/details/22220777

posted @   阿玛尼迪迪  阅读(671)  评论(0编辑  收藏  举报
编辑推荐:
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
阅读排行:
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 提示词工程师自白:我如何用一个技巧解放自己的生产力
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
点击右上角即可分享
微信分享提示