C++ *this与this的区别(系个人转载,个人再添加相关内容)

Posted 秦皇汉武

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ *this与this的区别(系个人转载,个人再添加相关内容)相关的知识,希望对你有一定的参考价值。

转载地址:http://blog.csdn.net/stpeace/article/details/22220777

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。也就是说,this是对象的地址。可以赋值给一个该类型的指针。

#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;
    }return 0;
}

输出的是4。

也就是*this在函数返回类型为A的时候,返回的是对象的拷贝。

但是,继续对代码添加如下内容:

    if(&a == &a.get())  
    {  
        cout << "yes" << endl;  
    }  
    else  
    {  
        cout << "no" << endl;  
    }  

结果发现,编译器报错:

说明,不仅返回的是一个对象的拷贝,还是一个temporary,即临时变量。这个时候,对临时变量取地址,是错误的。error。

(该结论对我所转载的原文进行了修正。原文是错误的。)

继续对代码进行修改:

#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和yes。

也就是*this在函数返回类型为A &的时候,返回的是该对象的引用本身。

以上是关于C++ *this与this的区别(系个人转载,个人再添加相关内容)的主要内容,如果未能解决你的问题,请参考以下文章

C++之中this指针与类的六个默认函数小结

android中activity.this跟getApplicationContext的区别

C++之sleep/usleep/this_thread::yield/this_thread::sleep_for延时区别(一百四十)

C++中的this指针是啥意思?

synchronized(this)与synchronized(class)(转载)

C++多态与this指针问题