改:今天看到的一个有趣面试题:return *this和return this有什么区别?
原文地址: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有什么区别?相关推荐
- 使用Java编一个有意思的_一个有趣的Java编译问题
学员冯伟立今天中午问了我一个有趣的Java编译问题,我也无法给他解释,不知道有没有路过的高人能够解释清楚原因,望不吝赐教! 下面程序的main方法中的第二行代码和注释中的两行代码表达的意思完全相同,注 ...
- 举个栗子!Tableau 技巧(116):做一个有趣的锥状柱形图
有 Tableau 用户提出很有趣的需求:柱形图太普通了,能不能让每一个柱子上面大.下面小,像圆锥那样呢? 很巧,我遇到过相同的需求,用 Tableau 实现类似 烟花升空 的柱形图(如下图),烟花下 ...
- 发现了一个有趣的字体:Fira Code字体(Eclipse可用)
看Github的时候发现了一个有趣的库,是关于字体的. 我平常很少关心前台表现,对编译器中的字体和颜色.主题也毫不关心,但这个字体还是比较有趣的,值得mark一下.可能会有点火星? 这个字体我看中的是 ...
- 给小孩发布一个有趣的网站 在线动物园
给小孩发布一个有趣的网站 在线动物园,可以实时看到动物园里的动物实时摄像头. 非常有意思,大热天也不用到动物园里看了. http://zoo.baidu.com/video.html
- 一个有趣的实验:用0.1f 替换 0,性能提升 7 倍!
点击关注上方"视学算法",设为"置顶或星标",第一时间送达技术干货. 本文来源:http://cenalulu.github.io/linux/about-de ...
- 一个有趣的小例子,带你入门协程模块-asyncio
上篇文章写了关于yield from的用法,简单的了解异步模式,[上次的内容链接]这次让我们通过一个有趣例子带大家了解asyncio基本使用. 目标效果图 在控制台中显示一个由ASCII字符" ...
- 这是一个有趣的问题,Java 8 Lambda 表达式被编译成了什么?
在了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么? 这是一个有趣的问题,涉及到JDK的具体的实现.本文将介绍OpenJDK对Lam ...
- union一个有趣的应用
今天在读<Linux高性能服务器编程>时看到一个有趣的东西.书中用了一个特别的方法去求字节序.我们知道字节序分为大端和小端,大端就是数据的高位字节存储在内存的低地址处,小段则反之.那么我们 ...
- 分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏]
分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣 作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏] 有些人似乎天生 ...
最新文章
- 安装Win8后必做的优化
- dsp指令ixh_第一章 DSP入门教程(非常经典).pdf
- Flash芯片(硬盘)与RAM芯片(内存)存储信息的区别!
- mysql虚拟机远程链接_windows下用navicat远程链接虚拟机Linux下MySQL数据库
- 复习Javascript专题(二):闭包,内存,以及垃圾回收机制
- mysql每一步花费时间_MySQL之:日志
- Android 点击应用外的Url拉起应用
- 24小时临时邮箱_实用网站 | 临时邮箱,悄悄来悄悄去~
- Linux Shell快速入门
- python list去重时间复杂度_List集合去重的一种方法 z
- 深度 | 带领国产数据库走向世界,POLARDB底层逻辑是什么?
- excel数据平均分配给多人_excel表格 怎样均分数据-用Excel怎么才能将组数据平均分配给几个人...
- 谷歌全球服务均宕机,系因内部存储配额问题引发
- zend 安装php 5.6,CentOS7.0+Zend Guard Loader for PHP 5.6环境搭建
- 大数据技术与应用实训心得_信息学院成功举办大数据技术与应用论坛
- 【车间调度】基于matlab遗传算法求解车间调度问题【含Matlab源码 1396期】
- JS导出Excel文件的方式
- 计算机网络:随机访问介质访问控制之CSMA/CA协议
- 人工智能基础——什么是人工智能
- Unsupervised Degradation Representation Learning for Blind Super-Resolution(基于无监督退化表示学习的盲超分辨率处理)