我什么时候应该使用非成员运算符重载?

时间:2011-10-23 22:28:40

标签: c++

我应该使用非成员重载还是成员重载?我怎么知道我应该使用哪个?

1 个答案:

答案 0 :(得分:3)

如果您正在考虑operator<swap之类的内容,则有一条经验法则(虽然它不是非常严格或强制要求):

如果该函数只需要访问您的类的公共接口,请将其设为免费的非成员函数。否则使它成为一个成员函数。 (或者您可以考虑friend免费功能。)

请注意,对于运算符的重载,您至少需要一个操作数是用户定义的类型。

免费功能的设计优势在于,如果您要为每个适用的类实现运算符的版本,则可以将其设为模板并获得M + N复杂度,而不是M * N 。这可能与您的情况有关,也可能不相关。

另请参阅有关该主题的Nawaz's very fine answer