重载C++中的复合赋值运算符
Overloading compound assignment operators in C++
为什么当我们重载 += 运算符时需要返回对类的引用? 例如,为什么原型是ClassName& operator += (const ClassName& instance)
而不是void operator += (const ClassName& instance)
?
几个原因。
这就是内置+=
和朋友所做的;你的重载版本最好在没有真正充分的理由和事实文档的情况下表现相同,否则使用它的人期望它表现得像内置的会感到不安。
内置的以这种方式作用,允许它们用作更大的表达式的一部分,例如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;
:
(所有示例都是非常精心设计的演示目的(
这是因为operator +=
必须是left-hand-expression
。
例如,在a += ...;
中,此表达式的计算结果不可能不是left-hand-expression
(即a += b + c + d;
(。
相关文章:
- 重载Singly Linked List中的赋值运算符
- 使用赋值运算符重载从类中返回jobject
- 标准库类型的赋值运算符的引用限定符
- 复制构造函数、赋值运算符C++
- C 复合赋值运算符 ^= 平均值
- 复合赋值运算符C++概念
- 在未初始化的变量上使用复合赋值运算符(+=, ..)不是C++中的UB?
- 复合赋值运算符是否不如 C++ 精确?
- 重载C++中的复合赋值运算符
- C++中重载复合赋值运算符不会更改变量
- 枚举的复合赋值运算符真的应该根据其关联的算术运算符来定义吗?
- 复合赋值运算符重载
- 在复合赋值运算符中强制转换
- 重载复合赋值运算符
- 复合赋值和添加运算符重载
- 使用复合赋值运算符解决转换警告
- 复合赋值运算符的类型/类型转换?(例如*=(星形等于))
- 枚举上复合赋值运算符的运算符重载
- 复合赋值和运算符之间的区别
- 是在C++中独立定义的算术/赋值运算符和复合赋值运算符