当我们重载 += 运算符时为什么需要返回对类的引用?
为什么原型(prototype)是 ClassName& operator += (const ClassName& instance)
而不是
void operator += (const ClassName& instance)
?
最佳答案
几个原因。
这就是内置的 +=
和 friend 所做的;你的重载版本最好在没有真正充分的理由和事实文档的情况下表现得一样,否则使用它的人期望它像内置的那样表现会不高兴。
内置函数以这种方式允许它们用作更大表达式的一部分,例如 a + (b += c)
。
这使得根据 operator+=()
和复制构造函数定义重载的 operator+()
变得容易。考虑
class foo {
foo& operator+=(const foo &b) {
// Do stuff
return *this;
}
};
foo operator+(foo a, const foo &b) { // First argument passed by value, second by reference
return a += b;
}
使复合运算符类成员和普通运算符独立是一种常见的风格建议;它允许第一个参数是不同的类型,只要它可以转换为 foo
:foo b; foo a = 1 + b;
(为了演示目的,所有示例都非常做作)
关于c++ - 在 C++ 中重载复合赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59077388/