c為何類才能使用預設引數而函式c,為何模板類才能使用預設模板引數,而模板函式卻不能?求教。

2021-03-07 09:49:46 字數 820 閱讀 1102

1樓:匿名使用者

這是因為函式是根據呼叫時的引數型別反推模板引數型別。而模板類别範本引數型別是你申明物件時給出的。好拗口啊!還是拿你的例子來舉例來說明好了:

我們定義一個模板函式:

template func(t1 p1, t2 p2);

然後在某一個地方呼叫:

int x; short y;

func(x, y);//編譯器編譯這裡的**時會根據實際引數x, y的型別得出t1是int,t2是short。如果你在函式板中指定typename t2 = int也沒啥用,而且甚至和推匯出的short矛盾。

而模板類就不一樣:

template class **ame;//類似函式的建構函式...};

**ameobj(x, y);//這裡t2已由給出了,它規定t1必須是int型別,t2必須是short型別,而不是由x, y來反推t1, t2。如果x, y型別不能隱式轉換成(int)x, (short)y則與申明不符會出編譯錯誤。

2樓:匿名使用者

你給fun函式傳個int,那個int多餘的啊,因為沒有typename匹配它

c++中,有關呼叫外部模板類函式的問題。

3樓:匿名使用者

模板類的宣告和函bai數體必須都放在du標頭檔案中。zhi否則編譯器在實體

dao化的時候沒辦法根

內據模板引數來

容確認實體部分的**。

這是規則。

如果您不想把模板類的定義放在標頭檔案,那麼唯一的方法就是把模板類定義、實體、使用者都放進file2.cpp。

說明為何要劃分子網?給出A類B類C類的預設子網掩碼

子網劃分的目的是 節約ip地址,避免浪費,限定廣播的傳播,保證網路的安全,有助於覆蓋大型地理區域。a類網路的預設子網掩碼是255.0.0.0,b類網路的預設子網掩碼是255.255.0.0,c類網路的預設子網掩碼是255.255.255.0。子網掩碼的作用就是用來判斷任意兩個ip地址是否屬於同一子網...

C 指標變數不能使用 運算子嗎

new int 開闢一個存放整數的儲存空間,返回一個指向該儲存空間的地址 即指標 new int 100 開闢一個存放整數的空間,並指定該整數的初值為100,返回一個指向該儲存空間的地址 new char 10 開闢一個存放字元陣列 包括10個元素 的空間,返回首元素的地址 new int 5 4 ...

英雄連OL怎麼才能使用指揮點數?

ol版已經和單機在升級方式上有很大不同了,因為一個帳號只能固定的選擇一個兵種,所以只能依靠升級獲得指揮點數慢慢的加上去,並解鎖增援和技術,你在戰鬥員中每局獲得的指揮點數只能算是你所獲得的經驗值,在每局結束後作戰大廳裡的經驗條才是看你升級與否的地方,每升一級獲得一個指揮點數,然後才能點技能獲得,一般來...