摘要:
如無必要勿增對象:因素類型轉換提供了文法上的便利。但是如果建立臨時對象的工作并不不要而且适于優化,那麼可以提供簽名與常見參數類型精确比對的重載函數,而且不會導緻轉換。
隐式轉換最常見的例子是字元串的比較,見如下程式:
上述代碼中,編譯器将進行比較操作,但是“==”操作符的兩邊都是conststring,這時就會進行隐式轉換,從char*隐式轉換到string。這樣會對程式的性能造成很大的影響,隐式轉換操作會複制字元,但是我們隻是比較,沒有必要複制。
這一個問題的解決方法是:定義重載以避免轉換。
這樣看起來會有重複代碼,但是這隻是“簽名重複”而已,因為所有三個重載通常都使用相同的後端函數。這樣的簡單重載,使你不可能掉入不成熟的優化的陷阱,而且提供它們隻是小菜一碟,尤其是在設計程式庫的時候,這時想要提前預測在性能敏感的代碼中将出現哪些常見類型是很困難的。