程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++模板函數重載不同之處點評

C++模板函數重載不同之處點評

編輯:C++入門知識

在C++編程語言中,有一種比較特殊的函數叫做模板函數。不過實際上它與普通的函數還是多少有些相同之處的。在這裡我們將會為大家講解一下C++模板函數重載中,不同於普通函數應用的幾點注意事項。

1:實例化後的模版函數如果和某個非模版函數的調用一樣的情況,會調用非模版函數。但也可以指定調用模版函數,如:

  1. inline int const& max(int const& a, int const& b)  
  2. {  
  3. // 為了便於區分,讓返回結果+100  
  4. return a < b ? a+10 : b+100;  
  5. }  
  6. template <typename T> 
  7. inline T const& max(T const& a, T const& b)  
  8. {  
  9. return a < b ? b : a;  
  10. }  
  11. // 這裡模版函數實例化後的形式和一個非模版函數一致。
    可以使用下面的方法指定調用模版函數  
  12. int i = max<>(42, 66); 

2:由於C++模板函數重載的參數是類型,因此它不支持類型轉化。但非模版函數支持類型轉換:

  1. inline int const& max(int const& a, int const& b)  
  2. {  
  3. return a < b ? b : a;  
  4. }  
  5. template<typename T> 
  6. inline T const& max(T const& a, T const& b)  
  7. {  
  8. return a < b ? b : a;  
  9. }  
  10. // 由於模版函數不支持類型轉換,這裡將調用非模版的max函數  
  11. max('c', 42.2); 

試想上面的代碼中,如果max('c', 42.2)要調用模板的max函數,它必須滿足兩個參數和返回值都是同一類型的條件。而給定的兩個參數類型不一致,模板函數又不支持類型轉換。因此,它找不到相匹配的模板函數,將會調用非模板的max函數。而如果我們強制使用max<>('c', 42.2)調用模板函數的話將會出現編譯錯誤。

以上就是對C++模板函數重載的相關介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved