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 &的时候,返回的是该对象的引用本身。

posted @ 2017-05-26 11:24  秦皇汉武  阅读(320)  评论(0编辑  收藏  举报