gpt4 book ai didi

c++ - 如何在 operator += 中调用 operator +

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:20 32 4
gpt4 key购买 nike

operator += 这样定义对吗?!

void operator +=(const BigNumber& other)
{
*this=(*this) + other;
}

在这样的类中:

class BigNumber
{
public:
//....
BigNumber operator +(const BigNumber& other)
{
return sum(other);
}

//....
}

最佳答案

是的。但正确的方法是根据 operator+= 来实现 operator+:

struct foo
{
int value;

foo& operator+=( const foo& other )
{
value += foo.value;
return *this ;
}

friend foo operator+( foo lhs , const foo& rhs )
{
return lhs += rhs;
}
};

为什么?

首先,二进制operator+()不应该被定义为成员函数而不是自由函数。这允许您在第一个参数不是 foo 的情况下实现加法。常见的习惯用法是在类中将其声明为 friend 以超越封装。

其次,这种方式提供了连贯、可维护且高效的界面

连贯性:

如果你实现了一个+=操作,用户会发现(极少数情况除外)该类型也提供了一个二进制加法。使用 += 实现 + 可以确保这两个操作的行为是一致的。

可维护性:

您已经使用 += 实现了 +,因此真正执行加法的代码只写了一次。如果您将来需要更改操作,您只需更改一个代码,如果它有错误,则该错误仅在一个站点中。一般来说,减少代码重复是一种很好的做法。

效率:

operator+() 的编写方式允许编译器轻松删除拷贝,从而提高二进制加法的性能。

使用的成语是“复制第一个操作数,对其进行操作,返回拷贝”。因此,编译器可以轻松执行返回值优化 (RVO)。此外,它按值传递第一个操作数,而不是在函数内部手动复制操作数。这允许编译器在第一个操作数是右值时执行更多复制省略(让编译器决定何时以及如何复制)。

关于c++ - 如何在 operator += 中调用 operator +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205175/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com