让我们看看一个例子
Foo& Foo::operator+=(Foo val)
{
// logic...
return *this;
}
Foo operator+(Foo v1, Foo v2)
{
return v1+=v2;
}
如果表达式v1+=v2
的类型为Foo&
,为什么可以将其用作返回Foo
的函数的返回值?在哪里演出?将operator+=
实现为Foo
成员的事实是否有所不同?
答案 0 :(得分:2)
C ++允许您使用引用代替对象。在按值返回对象(即通过复制)的情况下,编译器将使新对象无论如何都要返回;它只是为该对象分配您要返回的引用中的值,即
Foo operator+(Foo v1, Foo v2) {
Foo ret(v1+=v2); // << This is done implicitly
return ret;
}