C++讀書筆記之函數模板

來源:互聯網
上載者:User

  1,函數模板

  函數模板即允許多個函數定義簡化成用統一的函數定義形式來描述。實際上,函數模板表示了一組同名函數,這些同名函數之間,都是重載函數。

  函數模板定義的一般形式是:

  template <模板參數表>

  函數類型標誌符 函數名(形式參數列表)

  {

  //函數體

  }

  2,模板函數

  函數模板是模板定義,它指明了通用的函數參數。函數模板僅能定義一次,它建立了能在不同資料類型的基礎上執行相同操作的通用函數。函數模板定義僅僅是一個形式上的通用函數定義,C++編譯器並不為函數模板定義產生任何程式碼。在C++程式中,可以給函數模板的類屬類型指定具體的資料類型。C++編譯器通過程式中對函數模板調用時所給定的參數類型器檢驗是否與類屬屬性相匹配,若是,則以該實參類型替換類屬類型,產生一個實在的函數定義,稱為模板函數。這個過程就是函數模板定義執行個體化。C++編譯器所編譯的就是這個建立立的模板函數,它是一個重載函數。

  實際上,C++編譯器在對重載函數進行處理時,首先試圖去匹配一般的重載函數,如果匹配不上,再試圖去匹配函數模板,如果任然匹配不上,還有可能對一般的重載函數中的參數類型進行必要的、可行的隱式類型轉換後再去匹配。

例子:

 

#include <iostream>
#include <string.h>
using namespace std;
template <typename T>
T fun(T a, T b)
{
 return a+b;
}
int fun(int a,int b)
{
 return a-b;
}
int main()
{

 

 int a=20,b=40;
 float c=2.4,d=8.9;
 int result=fun(a,b);
 float R=fun(c,d);
 printf("result=%d,R=%f\n",result,R);
 return 0;
}

程式結果,result=-20,而不是60。R=11.300000

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.