Bài viết phổ biến của tác giả
- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
operator += 这样定义对吗?!
void operator +=(const BigNumber& other)
{
*this=(*this) + other;
}
在这样的类中:
class BigNumber
{
public:
//....
BigNumber operator +(const BigNumber& other)
{
return sum(other);
}
//....
}
câu trả lời hay nhất
是的。但正确的方法是根据 toán tử+=
nhận ra toán tử+
:
struct foo
{
giá trị int;
foo& operator+=( const foo& other )
{
value += foo.value;
return *this ;
}
friend foo operator+( foo lhs , const foo& rhs )
{
return lhs += rhs;
}
};
首先,二进制operator+()
不应该被定义为成员函数而不是自由函数。这允许您在第一个参数不是 foo
的情况下实现加法。常见的习惯用法是在类中将其声明为 người bạn
以超越封装。
Thứ hai,这种方式提供了连贯、可维护且高效的界面.
如果你实现了一个+=
操作,用户会发现(极少数情况除外)该类型也提供了一个二进制加法。使用 +=
实现 +
可以确保这两个操作的行为是一致的。
您已经使用 +=
Đã thực hiện +
,Vì vậy真正执行加法的代码只写了一次。如果您将来需要更改操作,您只需更改一个代码,如果它有错误,则该错误仅在一个站点中。一般来说,减少代码重复是一种很好的做法。
operator+()
的编写方式允许编译器轻松删除拷贝,从而提高二进制加法的性能。
使用的成语是“复制第一个操作数,对其进行操作,返回拷贝”。因此,编译器可以轻松执行返回值优化 (RVO)。此外,它按值传递第一个操作数,而不是在函数内部手动复制操作数。这允许编译器在第一个操作数是右值时执行更多复制省略(让编译器决定何时以及如何复制)。
关于c++ - 如何在 operator += 中调用 operator +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205175/
Tôi là một lập trình viên xuất sắc, rất giỏi!