《转》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 返回的是当前对象本身(也就是其引用),而非副本。
それでも私の大好きな人
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一次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)