zoukankan      html  css  js  c++  java
  • operator = 为什么要返回*this的应用

    Effictive c++中将要让operator =()返回*this的引用,原因说是为了连环赋值,测试一下,发现不是如此,参考

    http://blog.csdn.net/nodeathphoenix/article/details/38146421

    class Test {
    public:
        Test():num(0) {
        }
        Test(int n) :num(n) {
        }
        Test(const Test &test):num(test.num) {
        }
        Test operator =(Test &test) {
            num=test.num;
            return *this;
        }
        void Show(const Test &test) {
            std::cout << num <<std::endl;
            std::cout << test.num << std::endl;
        }
        ~Test() {
        };
    private:
        int num;
    };

    一样可以连环复制,如

    Test a,b,c(10);
    a=b=c;

    结果a,b,c都是10

    但是如果

    Test a,b,c(10);
    (a=b)=c;

    a,b都是0了,原因如下:

    函数的返回值也有值传递和引用传递,a=b的函数执行过程中,会创建返回值的临时变量,之后再通过copy构造函数构造a,而(a=b)=c其实是把c赋值给临时变量,所以并没有影响到a的值。

    如果返回引用,则不存在这个问题,而且少调用了两次copy构造函数,效率也更高。

    通过这个我发现,类的成员函数是可以访问类的任何实例的私有变量,如上面的Show(Test &test)函数。因为类的成员函数是跟类绑定在一起的,而不是跟类的实例绑定的。而且,类的成员函数不占用类的实例的空间。

  • 相关阅读:
    关闭游标
    OCP-1Z0-053-200题-19题-601
    OCP-1Z0-053-200题-17题-99
    OCP-1Z0-053-200题-18题-100
    OCP-1Z0-053-V13.02-99题
    OCP-1Z0-053-200题-16题-98
    OCP-1Z0-053-200题-15题-15
    OCP-1Z0-053-200题-14题-675
    OCP-1Z0-053-200题-13题-97
    OCP-1Z0-053-200题-12题-96
  • 原文地址:https://www.cnblogs.com/clark-lee/p/3896537.html
Copyright © 2011-2022 走看看