cuốn sách gpt4 ai đã làm

Cách gọi toán tử + trong toán tử +=

In lại Tác giả: Taklimakan 更新时间:2023-11-03 01:29:20 33 4
mua khóa gpt4 Nike

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/

33 4 0
Bài viết khuyến nghị: c++ - OpenSceneGraph 将相机设置在初始位置
Bài viết khuyến nghị: linux - 'pecl install ibm_db 2' can' t 查找库
Bài viết khuyến nghị: linux - Raspberry Pi IBeacon 缺少名称特征
Bài viết khuyến nghị: c++ - 写入终端和文件 C++
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress