第57課 深入理解函式模板

2021-10-03 12:20:47 字數 2068 閱讀 5297

本文內容來自於對狄泰學院 唐佐林老師 c++深度解析 課程的學習總結

函式模板

編譯器從函式模板通過具體型別 產生不同的函式

編譯器會 對函式模板進行兩次編譯

注意事項:

函式模板本身不允許隱式型別轉換

實驗**
#include

#include

using

namespace std;

class

test};

template

<

typename t>

void

swap

(t& a, t& b)

typedef

void

(funcint)

(int&,

int&);

typedef

void

(funcduoble)

(double&,

double&)

;typedef

void

(funct)

(test&

, test&);

intmain()

執行結果:

函式模板可以定義任意多個不同的型別引數

對於多引數函式模板

實驗程式設計

多個引數的函式模板

#include

#include

using

namespace std;

template

<

typename t1,

typename t2,

typename t3>

t1 add

(t2 a, t3 b)

intmain()

執行結果

實驗結果:1.當函式模板有返回值時,返回型別必須顯示指定

2.引數型別從左至右指定

過載函式模板

函式模板可以像普通函式一樣被過載

c++ 編譯器 優先考慮普通函式

如果函式模板可以產生乙個更好匹配,那麼選擇模板

可以通過 空模板實參列表 限定編譯器只匹配模板

例項分析

過載函式模板

#include

#include

using

namespace std;

template

<

typename t>

t max

(t a, t b)

intmax

(int a,

int b)

template

<

typename t>

t max

(t a, t b, t c)

intmain()

執行結果

小結

函式模板通過具體型別 產生不同的函式

函式模板可以定義 任意多個不同的型別引數

函式模板中的返回值型別必須顯示指定

函式模板可以像普通函式一樣被過載

57 深入理解函式模板

深入理解 編譯器從函式模板通過具體型別產生不同的函式。編譯器會對函式模板進行兩次編譯 對模板 本身進行編譯,對引數替換後的 進行編譯。注意事項 函式模板本身不是函式,是產生函式模子,因此模板本身不允許隱式型別轉換,自動推導型別時,必須嚴格匹配。顯示型別指定時,能夠進行隱式型別轉換。include i...

57 深入理解函式模板

1 函式模板深入理解 編譯器從函式模板通過具體型別產生不同的函式 編譯器會對函式模板進行兩次編譯 1 對模板 本身進行編譯 2 對引數替換後的 進行編譯 程式1 證明編譯器會對函式模板進行兩次編譯 include include using namespace std class test temp...

C 57 深入理解函式模板

include using namespace std class test template typename t void swap t a,t b typedef void funci int int typedef void funcd double double typedef void ...