zoukankan      html  css  js  c++  java
  • 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 &的时候,返回的是该对象的引用本身。

  • 相关阅读:
    第5天 css笔记-三大布局--浮动float
    第4天css笔记-选择器
    spring-mvc的配置
    小项目第一天
    IDEA引MAVEN项目jar包依赖导入问题解决
    Spring MVC 解读——@RequestMapping (2)(转)
    Spring MVC 解读——@RequestMapping (1)(转)
    Spring MVC 解读——<mvc:annotation-driven/>(转)
    Spring MVC 解读——@Autowired(转)
    Spring MVC 解读——<context:component-scan/>
  • 原文地址:https://www.cnblogs.com/xiaojieshisilang/p/6907639.html
Copyright © 2011-2022 走看看