zoukankan      html  css  js  c++  java
  • 《转》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 返回的是当前对象本身(也就是其引用),而非副本

     

    转自:https://blog.csdn.net/stpeace/article/details/22220777

  • 相关阅读:
    Linux定时任务编写
    Linux编辑器的选择使用
    nginx配置中文域名解析
    Linux中统计某个文件夹的大小
    nginx配置文件的说明
    获取自身ip
    Python之时间模块、random模块、json与pickle模块
    python之os模块详解
    日志模块logging介绍
    Python面向过程、模块的使用
  • 原文地址:https://www.cnblogs.com/codingmengmeng/p/9123326.html
Copyright © 2011-2022 走看看