首页 > 代码库 > operator = 为什么要返回*this的应用
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)函数。因为类的成员函数是跟类绑定在一起的,而不是跟类的实例绑定的。而且,类的成员函数不占用类的实例的空间。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。