在C++編程語言中,有一種比較特殊的函數叫做模板函數。不過實際上它與普通的函數還是多少有些相同之處的。在這裡我們將會為大家講解一下C++模板函數重載中,不同於普通函數應用的幾點注意事項。
1:實例化後的模版函數如果和某個非模版函數的調用一樣的情況,會調用非模版函數。但也可以指定調用模版函數,如:
- inline int const& max(int const& a, int const& b)
- {
- // 為了便於區分,讓返回結果+100
- return a < b ? a+10 : b+100;
- }
- template <typename T>
- inline T const& max(T const& a, T const& b)
- {
- return a < b ? b : a;
- }
- // 這裡模版函數實例化後的形式和一個非模版函數一致。
可以使用下面的方法指定調用模版函數- int i = max<>(42, 66);
2:由於C++模板函數重載的參數是類型,因此它不支持類型轉化。但非模版函數支持類型轉換:
- inline int const& max(int const& a, int const& b)
- {
- return a < b ? b : a;
- }
- template<typename T>
- inline T const& max(T const& a, T const& b)
- {
- return a < b ? b : a;
- }
- // 由於模版函數不支持類型轉換,這裡將調用非模版的max函數
- max('c', 42.2);
試想上面的代碼中,如果max('c', 42.2)要調用模板的max函數,它必須滿足兩個參數和返回值都是同一類型的條件。而給定的兩個參數類型不一致,模板函數又不支持類型轉換。因此,它找不到相匹配的模板函數,將會調用非模板的max函數。而如果我們強制使用max<>('c', 42.2)調用模板函數的話將會出現編譯錯誤。
以上就是對C++模板函數重載的相關介紹。