在使用類模板建立物件時,程式設計師需要顯式的指明實參(也就是具體的型別)。例如對於下面的 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 偏特化 ...