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

正确答案为:return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。return this返回当前对象的地址(指向当前对象的指针), 下面我们来看看程序吧:

[cpp] view plain copy

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

结果为:yes

再看:

[cpp] view plain copy

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

结果为:

4

no

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

c++ 中this 和 *this区别相关推荐

  1. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  2. 关于EF中ApplyCurrentValues和ApplyOriginalValues区别

    关于EF中ApplyCurrentValues和ApplyOriginalValues区别:两者都是编辑数据时使用. //         // 摘要:         //     将 System ...

  3. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  4. JAVA 中equals()与==的区别

    原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...

  5. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  6. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array

    java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...

  7. SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

    原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...

  8. android r类 作用,Android 主项目和 Module 中 R 类的区别

    Android 主项目和 Module 中 R 类的区别 我们知道 Android 项目中会通过自动生成一个 R.java 类的方式来保存项目中所有资源文件的标识在主项目中生成的 R.java 中的资 ...

  9. 【mybatis】mybatis中 的# 和 $的区别

    mybatis中 的# 和 $的区别 参考地址:https://www.cnblogs.com/sxdcgaq8080/p/10869144.html 转载于:https://www.cnblogs. ...

  10. 面试必问一:Java 中 == 和 equals 的区别你知道吗

    面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...

最新文章

  1. php 求数组组合数,php实现求数组全排列,元素所有组合的方法
  2. filco蓝牙不好用_2020双十二机械键盘选购 牌子推荐 附雷柏/ikbc/akko/杜伽/FILCO热销机械键盘品牌...
  3. python装饰器原理-Python 装饰器工作原理解析
  4. Android布局管理器-使用TableLayout表格布局管理器实现简单的用户登录页面
  5. SFB 项目经验-02-共存迁移-Lync 2013-TO-SFB 2015-规划02
  6. java面试题之hashCode与equals()方法
  7. Adobe发布基于HTML5技术的网络开发工具以解决跨平台问题
  8. (1)什么是socket(套接字)
  9. 显示滚动条后,table 表头与内容不对齐,JS脚本控制
  10. .Net MVC新建视图时出现“AutoMapper已拥有为System.ValueTuple定义的依赖项”的错误提示
  11. linux查找文件并显示修改时间,linux下find命令和文件的三种时间
  12. 3D屏保:魔方2.0版本
  13. linux正则表达式大全,正则表达式,正则表达式语法大全
  14. mariadb安装几个问题
  15. android 5.1 改mac地址,mac地址可以随便改吗
  16. 构造不可测集-Vitalie Set
  17. 魔术师usm安装服务器系统,魔术师u盘一键装系统
  18. java奈奈老师2_【图片】奥尔三X作【新任女教师奈奈、同居俏佳人、同居俏女仆】攻略&结局【javagame吧】_百度贴吧...
  19. linux ll命令是什么
  20. 时间格式Python

热门文章

  1. 修改 wordpress 后台管理员登录地址
  2. 基于C#在WinCE6.0系统SQLCE3.5的安装开发使用
  3. 2019年第十届蓝桥杯 - 省赛 - C/C++大学B组 - C. 数列求值
  4. 采用8种相位,每种相位各有两种幅度的QAM调制方法,在1200Baud的信号传输速率下能达到的网数据传输速率为( )
  5. 2013\Province_C_C++_A\4.颠倒的价牌
  6. 《数据库原理与应用》(第三版)第15章 备份和恢复数据库 基础 习题参考答案
  7. DSP 的双缓冲串口程序设计
  8. 【Qt5.8】Qt5.8中串口信息类QSerialPortInfo
  9. 【Linux系统编程】Linux 可执行文件结构与进程结构
  10. 苹果开发者_苹果,你的开发者文档写得烂透了