2017-03-16 90 views
0

如果编程语言允许,我应该总是重载操作符,还是创建成员函数更好?成员函数vs操作符重载

例如: bool operator ==(...) {...}bool equals(...){...}

+1

没有“永远”但是,如果过载操作符足够直观,那么可以回答,但通常认为这是一个很好的过载 – user

回答

3

如果操作者直接映射到功能的含义,然后将其建议使用操作者,例如

  • ==代替equals,因为它比较平等,
  • +代替add如果它加入例如数学向量,
  • 但不是+而不是add,如果它是例如。附加到列表中。
1

我只会这样做,如果它是绝对清楚它做了什么。阅读代码更好避免超载。因为你的大脑习惯于阅读单词而不是一些操作员。有时候操作员可以做出与猜测不同的事情。但我认为==已经足够清楚了。

如果在某些库中将它们用作回调函数,则运算符很适用。例如std::sort。您可以定义将使用的operator <,它将定义如何对对象进行排序。

2

,正如除其他答案:

非成员operator ==成员operator ==或某种之间的主要区别等于方法,它在我脑海中,是比较类/结构对象时使用隐式转换的机会。

所以,如果你有一些结构X

struct X { 
    X() = default; 
    X(int) {} 
}; 

您可以定义一个非成员operator ==X

bool operator==(const X&, const X&) { 
    // some logic here 
} 

然后让隐式转换的用途:

X x; 
std::cout << (42 == x) << " " << (x == 42) << std::endl;