我已经在互联网上浏览了一些运算符重载的例子,其中 operator+= 的返回类型是 T& 。由于我们不能像 += 那样链接 T a = b = c; ,因此可以将返回类型声明为 void 。使用 void 时,一切似乎都能正常工作。有什么情况是我们必须避免的吗?

例如:

class MyInteger{
    private:
        int x;
    public:
        MyInteger(const int& a):x(a){}
        void operator+=(const MyInteger& rhs){
            x += rhs.x;
        }
};

MyInteger a(10);
a += a;  //No need to return anything because we can't chain
a = a + (a += a);

最佳答案

您希望 operator += 返回对当前对象的引用的另一个原因是您想重载 operator + 。由于您正在编写一个整数类,因此如果 += 可用,则没有多大意义,但 + 不可用。

这是 operator + 的样子:

MyInteger MyInteger::operator+(const MyInteger& rhs)
{
   MyInteger temp(*this);
   return temp += rhs;  // <-- Uses operator +=
}

如果 operator += 没有返回引用,则上述内容将无法工作(甚至无法编译)。

关于c++ - 重载时返回运算符+= 的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36232136/

10-11 16:47