c++ - 在 C++ 中重载复合赋值运算符

标签 c++ operator-overloading operators

当我们重载 += 运算符时为什么需要返回对类的引用? 为什么原型(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/

相关文章:

c++ - C++ 中的抛出和三元运算符

c++ - 标准字符串查找方法和计数算法的逻辑错误

c++ - 如何使用控制台窗口中的输入顶点在 glut 中绘制多边形?

C++ iostream 运算符覆盖函数返回类型

c++ - C++类中的运算符重载

c++ - 将 operator>> 与指向 ifstream 对象的指针一起使用

javascript - 当按位运算符做同样的事情时为什么要使用逻辑运算符?

java - 有没有办法在 Android 上使用 WebRTC 共享屏幕

c++ - 将 inline 关键字与模板一起使用是否有意义?

c++ - 如何重载具有多个参数的运算符,如 a + b + c?