const function operator+(const function *) const;
如果您执行以下操作会发生什么:x += y;
...当x和y属于同一类时。它是否仍然适用于此上下文,还是必须x + y;
?
答案 0 :(得分:3)
为了使+=
适用于用户定义的类型,必须重载它。这与operator+
是否已为该类型重载无关。没有基于其他 1 的算术运算符的自动生成。
请注意,通常的策略是根据operator+
将operator +=
作为非成员加载。例如,
struct Foo
{
int i;
Foo& operator += (const Foo& rhs)
{
i += rhs.i;
return *this;
}
};
Foo operator+(const Foo& lhs, const Foo& rhs)
{
Foo result = lhs;
result += rhs;
return result;
}
注意:后一个运算符通常表示为一行或两行(例如,参见SO' s operator overloading wiki。但这会抑制返回值优化收益微薄。我在这里选择了一个更详细的实现来避免这个陷阱,而不会导致任何清晰度的损失。
1尝试解决这个问题"是boost operators
和破碎的std::rel_ops
答案 1 :(得分:3)
它们是截然不同的(就编译器而言)
但是,如果你重载了其中一个,那么为了保持一致性,也可能值得重载另一个
顺便说一句。以下是对运算符过载的非常好的解释: https://stackoverflow.com/a/4421719/3595112
答案 2 :(得分:0)
如果您想支持+=
,则需要重载operator+=
才能执行此操作。只是超载+
和/或=
是不够的。
Boost operators确实支持这一点。基本上,您提供了一组非常小的操作符的重载,并使用它们来填充漏洞。
答案 3 :(得分:0)
它不会工作,最终会出错。如果你想让+=
工作,你也需要重载那个算子,重载+
只是不够。