在C ++中,如果您有Foo类,并且希望Foo用户能够编写:

Foo x;
x += 3;


,您只需将Foo的成员函数设为Foo& operator+=(int rhs)。如果您想写:

Foo x;
int y = 3;
y += x;


,您不能通过编写Foo的成员函数来完成此操作,而是必须编写一个外部函数,通常必须将其声明为Foo的朋友。

将来的C ++版本说它可以用Foo成员函数int& operator+=(int &lhs, Reversed)编写有多难,其中Reversed是一个空类,其唯一目的是区分操作符的两个版本?

如果这样做,可能可以消除新代码中friend关键字的绝大多数使用。

最佳答案

实际上,您可以定义这样的运算符,因为您可以随意为内置类型重载+=

int& operator+=(int &lhs, Foo &rhs) {
  lhs += rhs.somefield;
  return lhs;
}


另一方面,除了为所有可能的运算符编写重载函数外,您还可以提供一个允许将class Foo隐式转换为int的函数:

class Foo {
  ... somefield;

  operator int() {
    return (int)somefield;
  }
};

关于c++ - C++中原始类型的运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39808976/

10-11 22:47
查看更多