在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/