所以根据这个question,最好将许多运算符实现为外部函数而不是成员函数。到目前为止,我认为这是因为“它使代码更加对称”......尽管我还没有弄清楚为什么这可能是有利的,除了它看起来不错。我猜测在使用模板时,这意味着您可以在不写大量代码的情况下离开。比较运算符`operator``作为成员函数或外部函数的实现
无论如何,我想知道的是:是否适合像operator<
这样的成员函数实现?还是没有这个好处?
我想问的原因是因为我永远不会想到将这样的操作符实现为外部函数。在我之前见过的很多例子中,操作符总是作为成员函数来实现的。他们在外部实施了一项近期被认为是“更好”的想法吗?
(PS:会有人请澄清为何外部的实现是要走的路?)
编辑:其实我发现这个link - 人们似乎不同意什么是最好的方法,以及为什么。
一个优点是'反身性';如果'+'不是一个重载成员函数,而是一个外部函数或者只有'obj + 1'是可能的,'obj + 1'和'1 + obj'将是可能的。 –
@UchiaItachi应该指出的是,这需要你为*和*运算符+(int i,const Type&obj)和operator +(const Type&obj,int i)让对象暴露一个兼容的cast-operator)。同样,任意类型的返回值通常需要一个临时构造(谢谢RVO),而OP所要求的'operator <()'返回一个“bool”等价物。 – WhozCraig
@WhozCraig是的,同意了。但只回答这个问题的前两句话:)无论如何感谢余下的! –