原文地址:https://blog.csdn.net/stpeace/article/details/22220777

说说为什么我要再写一篇文章,近些年学习编程的路上,深受各种错误翻译和一些错误理解的干扰,于是希望给后来人能指引一条争确的路,起码不误导他们,所以看到讲的不清楚不对的忍不住要写点东西。

下边是原文:

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

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

#include <iostream>
using namespace std;
 
class A
{
public:
    int x;
    A* get()
    {
        return this;
    }
};
 
int main()
{
    A a;
    a.x = 4;
 
    if(&a == a.get())
    {
        cout << "yes" << endl;
    }
    else
    {
        cout << "no" << endl;
    }
 
    return 0;
}
      结果为:yes

再看:

#include <iostream>
using namespace std;
 
class A
{
public:
    int x;
    A get()
    {
        return *this; //返回当前对象的拷贝
    }
};
 
int main()
{
    A a;
    a.x = 4;
 
    if(a.x == a.get().x)
    {
        cout << a.x << endl;
    }
    else
    {
        cout << "no" << endl;
    }
 
    if(&a == &a.get())
    {
        cout << "yes" << endl;
    }
    else
    {
        cout << "no" << endl;
    }
 
    return 0;
}
     结果为:
4

no

最后, 如果返回类型是A&, 那么return *this返回的是当前对象本身(也就是其引用), 而非副本。
--------------------- 
版权声明:本文为CSDN博主「stpeace」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/stpeace/article/details/22220777

下边是我的一些想法:return this;返回的就是当前对象的指针,这个没什么好说的;

但是,当当当,重点来了,return *this;这个返回的究竟是什么呢,声明返回类型时怎么写呢,结论来了,有两种写法

A  get()//这样写返回的就是一个拷贝,地址和原来对象地址不一样了

{

return *this;

}

或者

A& get()//这样写返回的就是一个引用,返回的就是原来的对象

{

return *this;

}

改:今天看到的一个有趣面试题:return *this和return this有什么区别?相关推荐

  1. 使用Java编一个有意思的_一个有趣的Java编译问题

    学员冯伟立今天中午问了我一个有趣的Java编译问题,我也无法给他解释,不知道有没有路过的高人能够解释清楚原因,望不吝赐教! 下面程序的main方法中的第二行代码和注释中的两行代码表达的意思完全相同,注 ...

  2. 举个栗子!Tableau 技巧(116):做一个有趣的锥状柱形图

    有 Tableau 用户提出很有趣的需求:柱形图太普通了,能不能让每一个柱子上面大.下面小,像圆锥那样呢? 很巧,我遇到过相同的需求,用 Tableau 实现类似 烟花升空 的柱形图(如下图),烟花下 ...

  3. 发现了一个有趣的字体:Fira Code字体(Eclipse可用)

    看Github的时候发现了一个有趣的库,是关于字体的. 我平常很少关心前台表现,对编译器中的字体和颜色.主题也毫不关心,但这个字体还是比较有趣的,值得mark一下.可能会有点火星? 这个字体我看中的是 ...

  4. 给小孩发布一个有趣的网站 在线动物园

    给小孩发布一个有趣的网站 在线动物园,可以实时看到动物园里的动物实时摄像头. 非常有意思,大热天也不用到动物园里看了. http://zoo.baidu.com/video.html

  5. 一个有趣的实验:用0.1f 替换 0,性能提升 7 倍!

    点击关注上方"视学算法",设为"置顶或星标",第一时间送达技术干货. 本文来源:http://cenalulu.github.io/linux/about-de ...

  6. 一个有趣的小例子,带你入门协程模块-asyncio

    上篇文章写了关于yield from的用法,简单的了解异步模式,[上次的内容链接]这次让我们通过一个有趣例子带大家了解asyncio基本使用. 目标效果图 在控制台中显示一个由ASCII字符" ...

  7. 这是一个有趣的问题,Java 8 Lambda 表达式被编译成了什么?

    在了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么? 这是一个有趣的问题,涉及到JDK的具体的实现.本文将介绍OpenJDK对Lam ...

  8. union一个有趣的应用

    今天在读<Linux高性能服务器编程>时看到一个有趣的东西.书中用了一个特别的方法去求字节序.我们知道字节序分为大端和小端,大端就是数据的高位字节存储在内存的低地址处,小段则反之.那么我们 ...

  9. 分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏]

    分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣 作者:1-2-3  来源:博客园  发布时间:2009-03-09 16:20  阅读:2820 次  原文链接   [收藏]   有些人似乎天生 ...

最新文章

  1. 安装Win8后必做的优化
  2. dsp指令ixh_第一章 DSP入门教程(非常经典).pdf
  3. Flash芯片(硬盘)与RAM芯片(内存)存储信息的区别!
  4. mysql虚拟机远程链接_windows下用navicat远程链接虚拟机Linux下MySQL数据库
  5. 复习Javascript专题(二):闭包,内存,以及垃圾回收机制
  6. mysql每一步花费时间_MySQL之:日志
  7. Android 点击应用外的Url拉起应用
  8. 24小时临时邮箱_实用网站 | 临时邮箱,悄悄来悄悄去~
  9. Linux Shell快速入门
  10. python list去重时间复杂度_List集合去重的一种方法 z
  11. 深度 | 带领国产数据库走向世界,POLARDB底层逻辑是什么?
  12. excel数据平均分配给多人_excel表格 怎样均分数据-用Excel怎么才能将组数据平均分配给几个人...
  13. 谷歌全球服务均宕机,系因内部存储配额问题引发
  14. zend 安装php 5.6,CentOS7.0+Zend Guard Loader for PHP 5.6环境搭建
  15. 大数据技术与应用实训心得_信息学院成功举办大数据技术与应用论坛
  16. 【车间调度】基于matlab遗传算法求解车间调度问题【含Matlab源码 1396期】
  17. JS导出Excel文件的方式
  18. 计算机网络:随机访问介质访问控制之CSMA/CA协议
  19. 人工智能基础——什么是人工智能
  20. Unsupervised Degradation Representation Learning for Blind Super-Resolution(基于无监督退化表示学习的盲超分辨率处理)

热门文章

  1. 【LeetCode从零单排】No.7 Reverse Integer
  2. 谈API网关的背景、架构以及落地方案--转
  3. 改变eclipse工程中代码的层次结构
  4. 【Git】Git教程
  5. 【数据分析】Python :知乎数据清洗整理和结论研究
  6. Java 8 - 收集器Collectors_分区partitioningBy
  7. 小工匠聊架构-超高并发秒杀系统设计 04_流量削峰设计
  8. JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】
  9. Java实现前中后序线索化二叉树以及遍历
  10. nginx实现前后端分离