如果我重载了+和=运算符,我是否必须重载+ =?

ty.*_*ty. 3 c++ operator-overloading

更一般地说,我应该让运营商超载?我知道重载+=是一件好事,因为扩展a = a + b创建了一个临时对象,而重载+=可以避免这种情况.会+=没有有效地超载使用我的重载运算符?

peo*_*oro 5

如果你没有超载+=它将不会被定义; 你将无法使用它.

我个人建议你提供它,因为+=如果有的话+,任何人都可能期望这是可用=的.

我还建议你使用Boost.Operators来重载应该根据其他人自动生成的运算符.


Ale*_* C. 5

实现operator+,支持代码重用的最佳方法是

class Foo
{
    Foo(Foo const&); // Implemented

    Foo& operator+=(Foo const& rhs)
    {
        // Implement all the addition-specific code here
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后

Foo operator+(Foo x, Foo const& y)
{
    x += y; return x;
}
Run Code Online (Sandbox Code Playgroud)

如果你必须做一个右侧的副本(由于实现特定的原因,通常不是这种情况),你可以在两个operator+=和第二个参数中传递值operator+.

  • @There我们无能为力:在这种情况下,我不确定所有编译器都能正确地执行RVO,因为`operator + =`返回一个引用.而且,你不需要括号:`return x + = y;` (2认同)