函數(shù)模板問(wèn)題
在筆試過(guò)程中遇到函數(shù)模板問(wèn)題,記錄問(wèn)題并給出解答。
問(wèn)題:
下面代碼會(huì)執(zhí)行什么結(jié)果:
#include<iostream> using namespace std; template <typename T> void print(T t){ cout<<"Template:"<<t<<endl; } void print(int i) { cout<<"int:"<<i<<endl; } int main() { print(10); print(10.0); return 0; }
結(jié)果:
int:10 Template:10
上面代碼的主要問(wèn)題是,調(diào)用print函數(shù)時(shí)函數(shù)模板和非模板函數(shù)的如何調(diào)用問(wèn)題。
解答:
首先,一個(gè)非模板函數(shù)可以和一個(gè)同名的函數(shù)模板同時(shí)存在。
然后,對(duì)于非模板函數(shù)和同名函數(shù)模板,如果其他條件都相同,在調(diào)用時(shí)會(huì)優(yōu)先調(diào)用非模板函數(shù)而不是從該模板產(chǎn)生處一個(gè)實(shí)例。如果做特殊定義可以實(shí)現(xiàn)有限調(diào)用模板。
使用顯示調(diào)用模板函數(shù),會(huì)使得優(yōu)先調(diào)用模板函數(shù)。具體代碼:
#include <iostream> using namespace std; template <typename T> void print(T t) { cout << "Template:" << t << endl; } void print(int i) { cout << "int:" << i << endl; } int main() { print<int>(10); // 顯式調(diào)用模板函數(shù),輸出 "Template:10" print(10.0); // 調(diào)用模板函數(shù),輸出 "Template:10" return 0; }
參考文獻(xiàn):
https://blog.csdn.net/weixin_47257473/article/details/128317603
https://www.runoob.com/cplusplus/cpp-templates.html

浙公網(wǎng)安備 33010602011771號(hào)