成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++模板參數具體概念講解

開發 后端
C++模板參數是什么呢?它的具體應用方式又是怎樣的呢?我們應該如何正確使用它來幫助我們實現一些特定的功能呢?在這里都會找到答案。

C++編程語言是一個功能強大的計算機應用語言,它的出現在一定程度上大大降低了開發人員的負擔,提高了開發效率。我們在這里先來了解一下C++模板參數的相關概念。簡單的說,可以把模板看作一種類型,函數模板也不例外。

既然是類型,那么我們在使用模板函數的時候就應該是使用它的一個實例。既然是類型與實例的關系,那么就應該有一個類型的實例化的問題。我們對普通類型進行實例化的時候通常需要提供必要的參數以,模板函數也不例外。只是C++模板參數不是普通的參數,而是特定的類型。也就是說在實例化一個函數模板的時候需要以類型作為參數。通常,模板的參數分為模板參數和調用參數。例如:

  1. template <typename T1, typename T2, typename RT> 
  2. inline RT const& max(T1 const& a, T2 const& b)  
  3. {  
  4. //TODO: 代碼實現  
  5. ........  

其中,***行定義了函數模板參數;第二行的函數參數則定義了調用參數,需要注意的是返回值并不屬于函數模板的調用參數。

在調用一個模板的時候,最重要的是在調用的時候能正確的推導出C++模板參數。這里有幾點要注意的:

1:顯示的實例化函數模板。例如:

  1. template <typename T> 
  2. inline T const& max(T const& a, T const& b)  
  3. {  
  4. return a < b ? b : a;  
  5. }  
  6. // 實例化并調用一個模板  
  7. max<double>(4, 4.2); 

第十行,通過顯示的指定C++模板參數為double而實例化了一個模板。

2:隱式的實例化一個函數模板。例如:

  1. template <typename T> 
  2. inline T const& max(T const& a, T const& b)  
  3. {  
  4. return a < b ? b : a;  
  5. }  
  6. // 隱式的實例化并調用一個函數模板  
  7. int i = max(42, 66); 

第8行,我們沒有顯示的指定函數模板參數,但它能自動的去推導出函數模板參數為int。這里可能有個問題。如果非模板函數它的定義和推導后的模板函數實例一樣,會產生什么結果呢?例如:

  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); 

實際上,第14行的代碼首先回去查看是否有滿足要求的非模板函數;如果沒有,再根據參數去匹配并實例化相應的模板函數。所以,它調用的應該是非模板的max函數。

3: 也可以使用部分缺省的C++模板參數。你不用指定全部的模板參數,比如,你可以從左到右的,指定一部分參數。例如:

  1. // 從左至右定義了三個參數  
  2. template <typename RT, typename T1, typename T2> 
  3. inline RT const& max(T1 const& a, T2 const& b)  
  4. {  
  5. //TODO: 代碼實現  
  6. ..  
  7. }  
  8. // 可以只指定***個返回參數。即,要求返回double類型  
  9. max<double>(4, 4.2); 

上面的代碼中,由于返回參數類型不屬于調用參數,所以必須明確的指定它為double類型。而T1和T2屬于調用C++模板參數,能從函數調用中推導出來。

【編輯推薦】

  1. C++使用接口基本實現方式解析
  2. C++左值與右值之間共同與不同點解析
  3. C++對象復制相關應用方式淺析
  4. C++變量作用域使用注意事項
  5. C++ sizeof概念及應用方式探討
責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-01 14:53:42

C++屬性

2010-02-04 10:08:00

C++靜態成員函數

2010-02-04 14:01:43

C++非類型類模板參數

2010-02-01 17:37:35

C++調用C鏈接庫

2010-02-05 17:34:37

C++函數模板

2010-02-04 13:56:24

C++類模板特化

2009-12-17 15:56:34

Rails參數bind

2010-02-06 17:21:20

C++ CreateT

2010-02-02 17:13:35

C++ Endian

2022-01-17 10:12:47

C++‘模板元編程

2010-02-04 17:49:04

C++參數傳遞

2010-01-15 10:41:06

CC++

2010-02-02 11:16:28

C++異常

2009-12-28 11:09:25

WPF啟動參數

2023-12-18 11:15:03

2010-02-01 15:01:34

C++拋出異常

2010-02-06 09:53:26

C++ void

2010-02-01 16:13:15

C++繼承

2023-12-13 10:51:49

C++函數模板編程

2010-01-25 18:26:44

CC++頭文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品中文 | 激情视频网站 | 在线只有精品 | 国产精品国产三级国产aⅴ中文 | 亚洲久草 | 日韩国产一区 | 欧美一级视频免费看 | 国产成人在线播放 | a级毛片毛片免费观看久潮喷 | 亚洲第一区久久 | 精品视频一区二区 | 久久成人精品视频 | 久久久久久女 | 久久精品视频91 | 国产精品a久久久久 | 99精品久久99久久久久 | 精品国产一区二区三区av片 | 色姑娘av | 欧美黑人体内she精在线观看 | 9191av| 天天干天天爱天天爽 | 成人在线播放 | 国产一区二区三区在线视频 | 亚洲国产网 | 精品国产一区二区三区成人影院 | 在线播放91 | 亚洲国产高清在线观看 | 亚洲精品性视频 | 国产精品一区二区免费 | 男女网站在线观看 | 精品免费国产一区二区三区四区 | 久久婷婷国产 | 欧美在线视频一区二区 | 久久新视频| 九九亚洲精品 | 久久福利网站 | 9久9久9久女女女九九九一九 | 欧美成人自拍视频 | 一级特黄视频 | 国产清纯白嫩初高生在线播放视频 | 久久久久亚洲精品 |