91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++模板參數的具體概念是什么

發布時間:2021-10-27 18:56:02 來源:億速云 閱讀:202 作者:柒染 欄目:編程語言

這篇文章給大家介紹C++模板參數的具體概念是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

關于C++模板參數的具體概念是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

察雅县| 玛纳斯县| 汨罗市| 莒南县| 泰和县| 修武县| 平阳县| 酒泉市| 湘潭县| 浦县| 阿城市| 青龙| 翼城县| 古丈县| 靖安县| 嵩明县| 北京市| 明水县| 长汀县| 上高县| 崇明县| 霍山县| 涟水县| 广德县| 涿鹿县| 普洱| 大理市| 平利县| 习水县| 乾安县| 万全县| 涞水县| 洪雅县| 金寨县| 万源市| 永吉县| 临洮县| 永安市| 民勤县| 蒙城县| 垫江县|