普通函数与函数模板的区别
生活随笔
收集整理的這篇文章主要介紹了
普通函数与函数模板的区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
普通函數(shù)與函數(shù)模板區(qū)別:
-
普通函數(shù)調(diào)用時(shí)可以發(fā)生自動(dòng)類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)
-
函數(shù)模板調(diào)用時(shí),如果利用自動(dòng)類型推導(dǎo),不會(huì)發(fā)生隱式類型轉(zhuǎn)換
-
如果利用顯示指定類型的方式,可以發(fā)生隱式類型轉(zhuǎn)換
#include <iostream> using namespace std; //普通函數(shù) int myAdd01(int a, int b) {return a + b; }//函數(shù)模板 template<class T> T myAdd02(T a, T b) {return a + b; }//使用函數(shù)模板時(shí),如果用自動(dòng)類型推導(dǎo),不會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換,即隱式類型轉(zhuǎn)換 void test01() {int a = 10;int b = 20;char c = 'c';cout << myAdd01(a, c) << endl; //正確,將char類型的'c'隱式轉(zhuǎn)換為int類型 'c' 對(duì)應(yīng) ASCII碼 99//myAdd02(a, c); // 報(bào)錯(cuò),使用自動(dòng)類型推導(dǎo)時(shí),不會(huì)發(fā)生隱式類型轉(zhuǎn)換myAdd02<int>(a, c); //正確,如果用顯示指定類型,可以發(fā)生隱式類型轉(zhuǎn)換 }int main() {test01();system("pause");return 0; }
建議使用顯示指定類型的方式,調(diào)用函數(shù)模板,因?yàn)榭梢宰约捍_定通用類型T
普通函數(shù)與函數(shù)模板的調(diào)用規(guī)則
調(diào)用規(guī)則如下:
如果函數(shù)模板和普通函數(shù)都可以實(shí)現(xiàn),優(yōu)先調(diào)用普通函數(shù)
可以通過(guò)空模板參數(shù)列表來(lái)強(qiáng)制調(diào)用函數(shù)模板
函數(shù)模板也可以發(fā)生重載
如果函數(shù)模板可以產(chǎn)生更好的匹配,優(yōu)先調(diào)用函數(shù)模板
總結(jié):既然提供了函數(shù)模板,最好就不要提供普通函數(shù),否則容易出現(xiàn)二義性
總結(jié)
以上是生活随笔為你收集整理的普通函数与函数模板的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 函数模板案例_利用函数模板封装一个排序的
- 下一篇: 模板的局限性