当前位置:  开发笔记 > 编程语言 > 正文

为什么operator = return*this?

如何解决《为什么operator=return*this?》经验,为你挑选了2个好方法。

说我想覆盖operator =所以我可以做类似的事情

Poly p1;  // an object representing a polynomial
Poly p2;  // another object of the same type    
p2 = p1;  // assigns all the contents of p1 to p2

然后在我的实现中operator =,我有这样的事情:

Poly& Poly::operator=(const Poly &source) {
    // Skipping implementation, it already works fine…
    return *this;
}

不介意实现,它已经正常工作.

我关心的是你什么时候会发生什么return *this?我知道它返回对象的引用,但这是怎么回事?

p2 = &p1

Paul Evans.. 16

return *this可以编写正常的复合C++ =语句,如:

Poly p1; //an object representing a polynomial
Poly p2;
Poly p2;

// ...

p3 = p2 = p1;  //assigns all the contents of p1 to p2 and then to p3

因为该陈述基本上是:

p3.operator=(p2.operator=(p1));

如果p2.operator=(...)没有,return *this你没有任何意义可以传递进去p3.operator=(...).



1> Paul Evans..:

return *this可以编写正常的复合C++ =语句,如:

Poly p1; //an object representing a polynomial
Poly p2;
Poly p2;

// ...

p3 = p2 = p1;  //assigns all the contents of p1 to p2 and then to p3

因为该陈述基本上是:

p3.operator=(p2.operator=(p1));

如果p2.operator=(...)没有,return *this你没有任何意义可以传递进去p3.operator=(...).



2> Vaughn Cato..:

p2 = p1是一个简写p2.operator=(p1).它只是调用你的operator=函数,它返回一个引用p2,然后你忽略它.为了说明这一点,让我们把它assign代替operator=:

Poly& Poly::assign(const Poly &source) {
    .
    .
    .
    return *this;
}

而不是p2 = p1,你会写

p2.assign(p1);

在这种情况下,调用的结果将assign被忽略,但您不必忽略它.例如,你可以写:

p3.assign(p2.assign(p1));

使用operator=而不是assign,这变成了

p3 = (p2 = p1);

但由于赋值是右关联的,因此也可以写成

p3 = p2 = p1;

这种能够一次完成多个赋值的形式最初来自C,并且通过返回的约定保存在C++ *thisoperator=().

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有