C 函式模板的實參推斷

2021-10-24 08:40:53 字數 768 閱讀 4328

在使用類模板建立物件時,程式設計師需要顯式的指明實參(也就是具體的型別)。例如對於下面的 point 類:

templateclass point;
我們可以在棧上建立物件,也可以在堆上建立物件:

pointp1(10, 20);  //在棧上建立物件

point*p = new point("東京180度", "北緯210度"); //在堆上建立物件

因為已經顯式地指明了 t1、t2 的具體型別,所以編譯器就不用再自己推斷了,直接拿來使用即可。

而對於函式模板,呼叫函式時可以不顯式地指明實參(也就是具體的型別)。請看下面的例子:

//函式宣告

templatevoid swap(t &a, t &b);

//函式呼叫

int n1 = 100, n2 = 200;

swap(n1, n2);

float f1 = 12.5, f2 = 56.93;

swap(f1, f2);

雖然沒有顯式地指明 t 的具體型別,但是編譯器會根據 n1 和 n2、f1 和 f2 的型別自動推斷出 t 的型別。這種通過函式實參來確定模板實參(也就是型別引數的具體型別)的過程稱為模板實參推斷。

在模板實參推斷過程中,編譯器使用函式呼叫中的實參型別來尋找型別引數的具體型別。

模板實參推斷過程中的型別轉換

對於普通函式(非模板函

模板實參推斷

定義 從函式實參確定模板實參的型別和值的過程叫做模板實參推斷 c primer 4th 舉例 template 模板型別形參 int compare const glorp v1,const glorp v2 函式形參 模板實參推斷的規則 1 如果某個函式的多個形參的型別是同乙個模板型別形參,推斷出...

002 模板實參推斷 過載與模板

一 模板函式顯示實參 情況1 template t1 sum t2 a,t3 b 分析 呼叫的時候就需要指定t1的型別,如 sum 1,2 於是sum函式的返回型別為float。情況2 template 糟糕的設計,使用者必須指定所有的三個模板引數 t3 sum t1 a,t2 b 分析 對於sum...

C 模板推斷函式型別

借助模板特例化和偏特化可以完成函式返回型別 輸入引數型別的推斷。我們直接步入主題 首先預熱編譯器對偏特化的型別匹配。c 模板庫中,std is same可判斷兩個型別是否相同,這裡我們可以借助偏特化自己實現乙個is same模板 templateclass is same template 偏特化 ...