为什么允许从对象到引用的隐式转换?

时间:2018-07-01 14:32:48

标签: c++ casting reference type-conversion

让我们看看一个例子

Foo& Foo::operator+=(Foo val)
{
    // logic...
    return *this;
}

Foo operator+(Foo v1, Foo v2)
{
    return v1+=v2;
}

如果表达式v1+=v2的类型为Foo&,为什么可以将其用作返回Foo的函数的返回值?在哪里演出?将operator+=实现为Foo成员的事实是否有所不同?

1 个答案:

答案 0 :(得分:2)

C ++允许您使用引用代替对象。在按值返回对象(即通过复制)的情况下,编译器将使新对象无论如何都要返回;它只是为该对象分配您要返回的引用中的值,即

Foo operator+(Foo v1, Foo v2) {
    Foo ret(v1+=v2); // << This is done implicitly
    return ret;
}