如果编程语言允许,我是否总是重载操作符,或者最好创建成员函数?
例如:
bool operator ==(...) {...}
要么
bool equals(...){...}
答案 0 :(得分:3)
如果操作员直接映射到函数的含义,则建议使用运算符,例如
==
代替equals
因为它比较了相等,+
代替add
,如果它正在添加,例如数学向量,+
而不是add
,如果它是附在清单上。答案 1 :(得分:2)
正如其他答案的补充:
非成员运营商== 和成员运营商== 或某种等于方法之间的主要区别,我想到了,在比较类/结构的对象时,是一个使用隐式转换的机会。
所以,如果你有一些结构X
:
struct X {
X() = default;
X(int) {}
};
您可以为X
定义非成员运算符== :
bool operator==(const X&, const X&) {
// some logic here
}
然后使用隐式转换:
X x;
std::cout << (42 == x) << " " << (x == 42) << std::endl;
答案 2 :(得分:1)
如果它完全清楚它的作用,我会这样做。对于阅读代码最好避免重载。因为你的大脑习惯于阅读单词而不是某些操作符。有时候运营商可以做一些与你猜测不同的事情。但我认为==
足够清楚。
如果在某些库中将操作符用作回调函数,则可以使用它们。例如std::sort
。您可以定义将使用的operator <
,它将定义如何对对象进行排序。