我应该使用非成员重载还是成员重载?我怎么知道我应该使用哪个?
答案 0 :(得分:3)
如果您正在考虑operator<
或swap
之类的内容,则有一条经验法则(虽然它不是非常严格或强制要求):
如果该函数只需要访问您的类的公共接口,请将其设为免费的非成员函数。否则使它成为一个成员函数。 (或者您可以考虑friend
免费功能。)
请注意,对于运算符的重载,您至少需要一个操作数是用户定义的类型。
免费功能的设计优势在于,如果您要为每个适用的类实现运算符的版本,则可以将其设为模板并获得M + N
复杂度,而不是M * N
。这可能与您的情况有关,也可能不相关。
另请参阅有关该主题的Nawaz's very fine answer。