0
我應該使用非成員重載還是成員重載?我如何知道我應該使用哪個?什麼時候應該使用非成員運算符重載?
我應該使用非成員重載還是成員重載?我如何知道我應該使用哪個?什麼時候應該使用非成員運算符重載?
如果你正在考慮類似operator<
或swap
,有一個經驗法則(儘管它並不非常嚴格或強制):
如果該功能只需要訪問類的公有接口,使它是一個免費的非會員功能。否則,使其成爲一個成員函數。 (或者,您可以考慮使用friend
免費功能。)
請注意,對於運算符的重載,您至少需要一個操作數爲用戶定義的類型。
自由函數的設計優點是,如果要爲其適用的每個類實現一個操作符版本,則可以使其成爲模板並獲得M + N
複雜性而非M * N
。這可能與您的情況相關,也可能不相關。
另請參閱關於這個問題的Nawaz's very fine answer。
感謝您的回答,非常有幫助 – flumpb