国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】泛型編程 ② ( 函數(shù)模板與普通函數(shù)區(qū)別 )

這篇具有很好參考價值的文章主要介紹了【C++】泛型編程 ② ( 函數(shù)模板與普通函數(shù)區(qū)別 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。






一、函數(shù)模板與普通函數(shù)區(qū)別




1、函數(shù)模板與普通函數(shù)區(qū)別


函數(shù)模板與普通函數(shù)區(qū)別 : 主要區(qū)別在于它們能夠處理的 數(shù)據(jù)類型數(shù)量 和 靈活性 ;

  • 自動類型轉換 :

    • 函數(shù)模板 不允許 自動類型轉化 , 會進行嚴格的類型匹配 ;
    • 普通函數(shù) 能夠進行 自動類型轉換 , 內(nèi)含隱式的類型轉化 ;
  • 參數(shù) / 返回值 數(shù)據(jù)類型 :

    • 普通函數(shù) 只接受 特定類型 參數(shù) , 如 : int / double / bool / string 等類型 ;
    • 函數(shù)模板 可以接受 任何類型 的參數(shù) , 函數(shù)模板在 C++ 編譯器 編譯時 將類型參數(shù)實例化 , 生成對應的 普通函數(shù) ;
  • 靈活性 :

    • 普通函數(shù) 對于 不同的 數(shù)據(jù)類型參數(shù) 需要單獨定義 ; 例如 : 定義一個加法函數(shù) , 接收參數(shù)類型分別是 int 和 float 類型 , 此時需要定義 2 個不同的函數(shù) ;
    • 函數(shù)模板 只需要定義一個函數(shù) , 就可以接收任何數(shù)據(jù)類型的參數(shù) ;
  • 語法不同 :

    • 普通函數(shù) 直接定義 返回類型 , 函數(shù)名 , 參數(shù)列表 , 函數(shù)體 , 即可 完成函數(shù)定義 , 如 : int add(int a, int b){} ;
    • 函數(shù)模板 先使用 template <typename T> 聲明泛型 , 后面跟著 返回類型 , 函數(shù)名 , 參數(shù)列表 , 函數(shù)體 , 等內(nèi)容 , 在 函數(shù)的 參數(shù)列表 返回類型 中可使用 聲明的 泛型類型 , 如 : T add(T a, T b){} ;
  • 函數(shù)模板實例化 : 使用函數(shù)模板時 , C++ 編譯器會根據(jù) 實際傳入的 參數(shù)類型 自動實例化相應的函數(shù) ; 如 : 定義的 T add(T a, T b) 類型的 函數(shù)模板 , 如果傳入 int 類型的參數(shù) , 會自動創(chuàng)建 int add(int a, int b) 普通函數(shù) ;

  • 函數(shù)模板弊端 - 復雜性 / 維護難度高 :

    • 復雜性 : 函數(shù)模板 需要為每一種可能的類型生成一個函數(shù)實例 , 所以 如果使用函數(shù)模板處理很多類型 , 需要創(chuàng)建很多普通函數(shù)實例 , 會導致編譯時間增加 , 代碼庫增大 ;
    • 維護難度高 : 如果錯誤地使用 函數(shù)模板 可能會導致難以查找的錯誤 , 普通函數(shù) 更簡單、更易于理解和維護。

2、代碼示例 - 函數(shù)模板與普通函數(shù)區(qū)別


在下面的函數(shù)中 , 第一個調(diào)用場景 , 完全符合 普通函數(shù) 的 調(diào)用要求 , 優(yōu)先調(diào)用 普通函數(shù) ;

	int a = 10, b = 20;
	// 調(diào)用普通函數(shù)
	// 如果符合普通函數(shù)要求 優(yōu)先調(diào)用普通函數(shù)
	int c = add(a, b);

第二個調(diào)用場景 , 因為使用了 函數(shù)模板 的顯式調(diào)用 , 必須使用 函數(shù)模板 ;

	int i = 30, j = 40;
	// 調(diào)用函數(shù)模板
	// 函數(shù)模板 顯式類型調(diào)用
	int k = add<int>(i, j);

第三個調(diào)用場景 , 參數(shù)類型不符合普通函數(shù)調(diào)用 , 符合 函數(shù)模板 的調(diào)用規(guī)則 , 這里使用 函數(shù)模板 ;

	double x = 50.0, y = 60.0;
	// 調(diào)用函數(shù)模板
	// 函數(shù)模板 自動類型推導
	double z = add(x, y);

代碼示例 :

#include "iostream"
using namespace std; 

// 使用 template 關鍵字 聲明函數(shù)模板 
// 告訴 C++ 編譯器 開始使用 泛型編程 
// 定義的 T 是泛型類型 
// 聲明了多個泛型, 可以只使用其中的部分類型
// 使用函數(shù)模板時 , 顯式類型調(diào)用 必須 顯式指定所有 泛型類型 的實際類型
template <typename T>
T add(T a, T b) {
	cout << "調(diào)用函數(shù)模板 T add(T a, T b)"<< endl;
	return a + b;
}

// 函數(shù)模板的 重載函數(shù)
// 重載是發(fā)生在 同一個作用域中
// 重寫是發(fā)生在 父類 與 子類 之間
// C++ 編譯器優(yōu)先 調(diào)用 符合要求的 普通函數(shù)
// 如果普通函數(shù)不符合要求 , 則考慮調(diào)用 函數(shù)模板
int add(int a, int b) {
	cout << "調(diào)用普通函數(shù) int add(int a, int b)" << endl;
	return a + b;
}

// 普通函數(shù) , 函數(shù)模板 調(diào)用 優(yōu)先級
// 函數(shù)模板 會進行 嚴格類型匹配 , 不會進行 類型轉換 ; 
// 
// 如果 符合 普通函數(shù)類型參數(shù)要求 , 優(yōu)先調(diào)用普通函數(shù) ; 
// 如果 沒有 符合要求的 普通函數(shù) , 則查看 模板函數(shù) 能否匹配 ; 
// 如果 模板函數(shù) 仍不能匹配 , 則查看 普通函數(shù) 類型轉換能否匹配 ; 

int main() {

	int a = 10, b = 20;
	// 調(diào)用普通函數(shù)
	// 如果符合普通函數(shù)要求 優(yōu)先調(diào)用普通函數(shù)
	int c = add(a, b);
	cout << "c = " << c << endl;

	int i = 30, j = 40;
	// 調(diào)用函數(shù)模板
	// 函數(shù)模板 顯式類型調(diào)用
	int k = add<int>(i, j);
	cout << "k = " << k << endl;

	double x = 50.0, y = 60.0;
	// 調(diào)用函數(shù)模板
	// 函數(shù)模板 自動類型推導
	double z = add(x, y);
	cout << "z = " << z << endl;
	
	// 控制臺暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");

	return 0;
}

執(zhí)行結果 :


調(diào)用普通函數(shù) int add(int a, int b)
c = 30
調(diào)用函數(shù)模板 T add(T a, T b)
k = 70
調(diào)用函數(shù)模板 T add(T a, T b)
z = 110
Press any key to continue . . .


【C++】泛型編程 ② ( 函數(shù)模板與普通函數(shù)區(qū)別 ),C++,c++,泛型,泛型編程,函數(shù)模板,template文章來源地址http://www.zghlxwxcb.cn/news/detail-830961.html

到了這里,關于【C++】泛型編程 ② ( 函數(shù)模板與普通函數(shù)區(qū)別 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【C++】泛型編程 ① ( 函數(shù)模板 | 函數(shù)模板概念 | 函數(shù)模板意義 | 函數(shù)模板定義語法 | 函數(shù)模板調(diào)用語法 | 顯式類型調(diào)用 | 自動類型推導 )

    【C++】泛型編程 ① ( 函數(shù)模板 | 函數(shù)模板概念 | 函數(shù)模板意義 | 函數(shù)模板定義語法 | 函數(shù)模板調(diào)用語法 | 顯式類型調(diào)用 | 自動類型推導 )

    在 C++ 語言中 , 泛型編程 的 核心就是 函數(shù)模板 和 類模板 ; 函數(shù)模板 Function Template 是 C++ 語言 中的 重要特性 ; 函數(shù)模板概念 : 建立一個 \\\" 通用函數(shù) \\\" , 不指定該函數(shù)的 函數(shù)返回值類型 和 函數(shù)參數(shù)類型 , 僅使用 \\\" 虛擬類型 \\\" 代表 上述 兩種類型 , 該 \\\" 通用函數(shù) \\\" 就是 \\\" 函數(shù)模

    2024年02月19日
    瀏覽(28)
  • C++、STL標準模板庫和泛型編程 ——迭代器、 算法、仿函數(shù)(侯捷)

    C++、STL標準模板庫和泛型編程 ——迭代器、 算法、仿函數(shù)(侯捷)

    侯捷 C++八部曲筆記匯總 - - - 持續(xù)更新 ! ! ! 一、C++ 面向?qū)ο蟾呒夐_發(fā) 1、C++面向?qū)ο蟾呒壘幊?上) 2、C++面向?qū)ο蟾呒壘幊?下) 二、STL 標準庫和泛型編程 1、分配器、序列式容器 2、關聯(lián)式容器 3、迭代器、 算法、仿函數(shù) 4、適配器、補充 三、C++ 設計模式 四、C++ 新標準 五、

    2023年04月25日
    瀏覽(34)
  • C++泛型編程之模板

    C++泛型編程之模板

    目錄 一、什么是泛型編程? 二、函數(shù)模板 2.1函數(shù)模板的概念 2.2函數(shù)模板格式 2.3函數(shù)模板的原理 ?2.5函數(shù)模板的實例化 2.6模板參數(shù)的匹配原則 三、類模板 3.1類模板的定義格式 3.2 類模板的實例化 四、非類型模板參數(shù) 五、模板的特化 5.1模板特化的概念: 5.2函數(shù)模板特化 5

    2024年02月07日
    瀏覽(19)
  • 【C++】泛型編程——模板進階

    【C++】泛型編程——模板進階

    在之前的文章里,我們進行了模板初階的學習( 【C++】泛型編程——模板初階),了解了什么是泛型編程,學習了函數(shù)模板和類模板。 那這篇文章,我們繼續(xù)學習模板進階的內(nèi)容的學習。 首先我們來回顧一下: 我們在模板初階的學習中,定義模板參數(shù)是怎么定義的? 是不

    2024年02月16日
    瀏覽(19)
  • 【C++】C++泛型編程 | 模板初階

    【C++】C++泛型編程 | 模板初階

    ??????? 個人主頁:簡 料 ???? 所屬專欄:C++ ???? 個人社區(qū):越努力越幸運社區(qū) ???? 簡? ? ?? 介: 簡料簡料,簡單有料~在校大學生一枚,專注C/C++/GO的干貨分享,立志成為您的好幫手 ~ C/C++學習路線 (點擊解鎖) ?? C語言 ?? 初階數(shù)據(jù)結構與算法 ?? C++ ??

    2024年02月08日
    瀏覽(29)
  • 【C++基礎(十)】C++泛型編程--模板初階

    【C++基礎(十)】C++泛型編程--模板初階

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:C++從入門到精通? ? ??代碼倉庫:NEO的學習日記?? ? ??關注我??帶你學習C++ ? ???? 在學習數(shù)據(jù)結構時會遇見以下的情況 數(shù)據(jù)結構中存儲的類型往往不能確定 所以在實現(xiàn)數(shù)據(jù)結構時往往是這樣做的 在寫代碼時用DateType來表

    2024年02月13日
    瀏覽(47)
  • C++——模板初階與泛型編程

    C++——模板初階與泛型編程

    ??作者簡介: 花想云 ,在讀本科生一枚,致力于 C/C++、Linux 學習。 ?? 本文收錄于 C++系列 ,本專欄主要內(nèi)容為 C++ 初階、C++ 進階、STL 詳解等,專為大學生打造全套 C++ 學習教程,持續(xù)更新! ?? 相關專欄推薦: C語言初階系列 、 C語言進階系列 、 數(shù)據(jù)結構與算法 本章我們

    2023年04月17日
    瀏覽(13)
  • 【c++ primer 筆記】第 16章 模板與泛型編程

    【c++ primer 筆記】第 16章 模板與泛型編程

    ??作者簡介:?? 博主在讀機器人研究生,目前研一。對計算機后端感興趣,喜歡 c + + , g o , p y t h o n , 目前熟悉 c + + , g o 語言,數(shù)據(jù)庫,網(wǎng)絡編程,了解分布式等相關內(nèi)容 textcolor{orange}{博主在讀機器人研究生,目前研一。對計算機后端感興趣,喜歡c++,go,python,目前熟悉c+

    2024年02月20日
    瀏覽(28)
  • C++、STL標準模板庫和泛型編程 ——適配器、補充(侯捷)

    C++、STL標準模板庫和泛型編程 ——適配器、補充(侯捷)

    侯捷 C++八部曲筆記匯總 - - - 持續(xù)更新 ! ! ! 一、C++ 面向?qū)ο蟾呒夐_發(fā) 1、C++面向?qū)ο蟾呒壘幊?上) 2、C++面向?qū)ο蟾呒壘幊?下) 二、STL 標準庫和泛型編程 1、分配器、序列式容器 2、關聯(lián)式容器 3、迭代器、 算法、仿函數(shù) 4、適配器、補充 三、C++ 設計模式 四、C++ 新標準 五、

    2023年04月27日
    瀏覽(28)
  • C++核心編程——詳解函數(shù)模板

    C++核心編程——詳解函數(shù)模板

    縱有疾風起,人生不言棄。本文篇幅較長,如有錯誤請不吝賜教,感謝支持。 ①為什么有模板? 在C++程序中,聲明變量、函數(shù)、對象等實體時,程序設計者需要指定數(shù)據(jù)類型,讓編譯器在程序運行之前進行類型檢查并分配內(nèi)存,以提高程序運行的安全性和效率。 但是這種強

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包