使用" + ="什么时候" +"是否在类函数中重载?

时间:2014-05-02 05:38:56

标签: c++ function class overloading operator-keyword

const function operator+(const function *) const;

如果您执行以下操作会发生什么:x += y; ...当x和y属于同一类时。它是否仍然适用于此上下文,还是必须x + y;

4 个答案:

答案 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)

它不会工作,最终会出错。如果你想让+=工作,你也需要重载那个算子,重载+只是不够。