浅析C/C++ 中return *this和return this的区别

 更新时间:2019年10月21日 16:07:49   作者:ZhuJD  
return *this返回的是当前对象的克隆或者本身,return this返回当前对象的地址,下面通过本文给大家介绍C/C++ 中return *this和return this的区别,感兴趣的朋友一起看看吧

首先我们知道~

class Test
{
public: 
 Test()
 { 
  return this; //返回的当前对象的地址
 }
 Test&()
 { 
  return *this; //返回的是当前对象本身
 }
 Test()
 { 
  return *this; //返回的当前对象的克隆
 }
private: //...
};

return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是拷贝, 若返回类型为A&, 则是本身 )。

return this返回当前对象的地址(指向当前对象的指针)

我们再来看看返回拷贝那个的地址~

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

 return 0;
}

由运行结果得知会报下列错误!!!

cpp [Error] taking address of temporary [-fpermissive]

这是因为引用了临时对象的地址而引发的警报 临时对象不可靠……

所有要注意!

下面谈谈[C++]类成员返回语句 return *this 的理解

经常会在类似 copy-assignment 的成员函数看到返回语句 return *this ,这类函数通常返回类型是所属类的引用。

类成员函数的隐式指针 class *this const 经过 *this的解引用后成为此对象本身。此时若成员函数返回类型是 class ,那么返回的将是 this 指向的对象实体的拷贝;

若返回类型是 class& ,那么将返回一个绑定在 this 指向的对象实体上的引用。

总结

以上所述是小编给大家介绍的C/C++ 中return *this和return this的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:

相关文章

  • C语言关于二叉树中堆的创建和使用整理

    C语言关于二叉树中堆的创建和使用整理

    大家好,这里是针对二叉树中堆结构的顺序储存,整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步
    2022-08-08
  • C++中使用FFmpeg适配自定义编码器的实现方法

    C++中使用FFmpeg适配自定义编码器的实现方法

    本文介绍了在C++中使用FFmpeg库进行自定义编码器适配的实现方法。文章通过具体的代码示例,介绍了FFmpeg的基本使用方法和自定义编码器的实现过程,帮助读者了解如何在C++中进行音视频编码和解码的开发工作,并能够实现自定义的编码器适配
    2023-04-04
  • C++11 成员函数作为回调函数的使用方式

    C++11 成员函数作为回调函数的使用方式

    这篇文章主要介绍了C++11 成员函数作为回调函数的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 十个C++恶搞朋友的代码合集

    十个C++恶搞朋友的代码合集

    这篇文章主要为大家整理了十个C++中可以恶搞朋友的代码合集(注意!从第五个开始为危险/永久性程序,请慎重使用),感兴趣的小伙伴可以收藏一下
    2023-02-02
  • C++实现RSA加密解密算法是示例代码

    C++实现RSA加密解密算法是示例代码

    非对称加密方式可以使通信双方无需事先交换密钥就可以建立安全通信,因此被广泛应用于身份认证、数字签名、等信息交换领域。其中最具有代表性的非对称加密方式就是RSA公钥密码体制。本文将用C++实现RSA加密解密算法,需要的可以参考一下
    2022-09-09
  • c/c++ 奇技淫巧(一些c语言的技巧)

    c/c++ 奇技淫巧(一些c语言的技巧)

    这篇文章主要介绍了c/c++ 奇技淫巧,需要的朋友可以参考下
    2017-03-03
  • OpenCV图像特征提取之Shi-Tomasi角点检测算法详解

    OpenCV图像特征提取之Shi-Tomasi角点检测算法详解

    Harris角点检测算法就是对角点响应函数R进行阈值处理,Shi-Tomasi原理几乎和Harris一样的,只不过最后计算角点响应的公式发生了变化。本文将和大家详细说说Shi-Tomasi角点检测算法的原理与实现,需要的可以参考一下
    2022-09-09
  • C语言中读写交替时出现的问题分析

    C语言中读写交替时出现的问题分析

    读写命令交替,一定要使用fseek重新定位,否则出现输入显示混乱,这篇文章主要介绍了C语言中读写交替时出现的问题分析,需要的朋友可以参考下
    2022-12-12
  • C语言详解无头单向非循环链表各种操作方法

    C语言详解无头单向非循环链表各种操作方法

    无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多
    2022-04-04
  • C语言数据结构 栈的基础操作

    C语言数据结构 栈的基础操作

    这篇文章主要介绍了C语言数据结构 栈的基础操作的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论