在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
关键字的绝大部分用途。
答案 0 :(得分:2)
您实际上可以定义这样的运算符,因为您可以为内置类型重载+=
:
int& operator+=(int &lhs, Foo &rhs) {
lhs += rhs.somefield;
return lhs;
}
另一方面,除了为所有可能的运算符编写重载函数之外,您还可以提供一个允许class Foo
到int
的隐式强制转换的函数:
class Foo {
... somefield;
operator int() {
return (int)somefield;
}
};