歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++中函數重載和函數模板的理解

第二遍看C++Primer Plus。。淚目啊。。C++真心難,第一遍是我一年前看的。現在再看感覺好像全新的一樣。。。

好了,簡單介紹下函數重載,學過編程的都對這個重載很熟悉了。函數重載的判斷標識是它的函數參數列表,而不是返回值來判斷的。所以像 

 

  1. long gronk(int n, float m);  
  2. double gronk(int , float m);  

是會報錯的。這沒有函數重載。

接下來是函數模板。

函數模板類似

 

  1. template<class Any>  
  2. void swap (Any &a, Any &b)  
  3. {  
  4.     Any temp;  
  5.     temp = a;  
  6.     a = b;  
  7.     b = temp;  
  8. }   

接下來介紹下函數模板裡非常重要的具體化和實例化。

其實,在使用函數模板時,編譯器會自動把模板實例化,稱為隱式實例化,類似 

 void swap (int &a, int &b);  

就是實例化成了這樣一個函數, 只不過是隱式的。

顯示實例化類似

 template void swap<int>(int &a,int &b);  

顯示具體化類似

 template <> void swap<int>(int &a,in t &b);  

兩者的差別是template後面的括號。

具體化將會覆蓋常規模板,非模板函數將會覆蓋具體化和常規模板。

在我的理解就是,顯式具體化和顯示實例化都是講某一特定類型的模板函數進行實例化,調用它們時將不會調用模板函數的定義。所以同一編程單元中,同一類型不能同時存在顯示具體化和顯示實例化。否則二義了。

好了,先介紹這裡。明天開始我網絡方面的可靠數據傳輸協議還要看看,C++的類和對象還要復習下,爭取把const和引用的關系整理出來,也寫一下。

相關閱讀:

C++中函數建立臨時變量的機制(const) http://www.linuxidc.com/Linux/2012-08/67430.htm

C Primer Plus(第五版)中文版[PDF+源代碼]下載 http://www.linuxidc.com/Linux/2012-05/60075.htm

Copyright © Linux教程網 All Rights Reserved