码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-05-26 11:52:49      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:art   c++   error   地址   .net   ges   行修改   src   技术分享   

转载地址: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的区别(系个人转载,个人再添加相关内容)

标签:art   c++   error   地址   .net   ges   行修改   src   技术分享   

原文地址:http://www.cnblogs.com/xiaojieshisilang/p/6907639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!