【C++深度剖析教程36】深入理解函数模板
生活随笔
收集整理的這篇文章主要介紹了
【C++深度剖析教程36】深入理解函数模板
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
加qq1126137994 微信:liu1126137994 一起學(xué)習(xí)更多技術(shù)!!!
1、函數(shù)模板深入理解
*對(duì)模板進(jìn)行編譯
*對(duì)參數(shù)替換后的函數(shù)進(jìn)行編譯
注意事項(xiàng):
函數(shù)模板本身不允許隱式類型轉(zhuǎn)換
- 調(diào)用函數(shù)自動(dòng)推倒類型時(shí)必須嚴(yán)格匹配類型
- 顯示類型指定時(shí),能夠進(jìn)行隱式類型轉(zhuǎn)換
函數(shù)模板可以定義任意多個(gè)不同類型的參數(shù)
對(duì)于多參數(shù)模板
*無法自動(dòng)推倒函數(shù)的返回值類型
*可以從左向右部分指定類型參數(shù)
工程中將返回值參數(shù)作為第一個(gè)類型參數(shù)
#include <iostream> #include <string>using namespace std;template < typename T1, typename T2, typename T3 > T1 Add(T2 a, T3 b) {return static_cast<T1>(a + b); }int main() {// T1 = int, T2 = double, T3 = doubleint r1 = Add<int>(0.5, 0.8);// T1 = double, T2 = float, T3 = doubledouble r2 = Add<double, float>(0.5, 0.8);// T1 = float, T2 = float, T3 = floatfloat r3 = Add<float, float, float>(0.5, 0.8);cout << "r1 = " << r1 << endl; // r1 = 1cout << "r2 = " << r2 << endl; // r2 = 1.3cout << "r3 = " << r3 << endl; // r3 = 1.3return 0; }2、函數(shù)重載與函數(shù)模板
當(dāng)函數(shù)重載遇上函數(shù)模板會(huì)發(fā)生什么?
函數(shù)模板可以像普通函數(shù)一樣被重載:
- C++編譯器優(yōu)先考慮普通函數(shù)
- 如果函數(shù)模板可以產(chǎn)生一個(gè)更好的匹配,則優(yōu)先使用函數(shù)模板
- 可以通過空模板實(shí)參列表,來限制編譯器只匹配模板
3、總結(jié)
總結(jié)
以上是生活随笔為你收集整理的【C++深度剖析教程36】深入理解函数模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python对excel操作简书_Pyt
- 下一篇: 【剑指offer - C++/Java】