亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++模版函數詳解

2020-01-26 14:14:44
字體:
來源:轉載
供稿:網友

C++中的模版總體可以分為兩大類:模版函數、模版類。本篇文章先寫模版函數,接下來會介紹模版類。

定義:模版函數是通用的函數描述,也就是說它們使用通用類型來定義,其中的通用類型可用具體類型替換。

代碼實例:

#include <iostream>//模版類的聲明template<typename T>void Swap(T& a,T& b);int main(){  int i = 10;  int j = 20;  std::cout<<"i=" << i << "," << "j=" <<j;  Swap(i,j);//生成 void Swap(int &,int&);  std::cout<<"i=" << i << "," << "j=" <<j;  double x = 11.5;  double y = 19.5;  std::cout<<"x=" << x << "," << "y=" <<y;  Swap(x,y);//編譯器生成 void Swap(double &,double&);  std::cout<<"x=" << x << "," << "y=" <<y;  return 0;}//模版類的定義template<typename T>void Swap(T& a,T& b){  T temp;  temp = a;  a = b;  b = temp;}

以上實例為最簡單的函數模版實例,編譯器會根據具體使用的類型生成相對應的函數。

重載的模版:

需要多個對不同的類型使用同一算法時可使用模版,如上代碼所示。但是并非所有的類型都使用相同的算法。為滿足這種需求,可以像重載常規函數定義那樣重載模版定義。和重載常規函數一樣,重載函數的特征表必須不同。代碼實例如下:

#include <iostream>//模版類的聲明template<typename T>void Swap(T& a,T& b);const int iCount = 5;template<typename T>void Swap(T* a,T*b,int n);int main(){  int i = 10;  int j = 20;  std::cout<<"i=" << i << "," << "j=" <<j;  Swap(i,j);//生成 void Swap(int &,int&)  std::cout<<"i=" << i << "," << "j=" <<j;  double x = 11.5;  double y = 19.5;  std::cout<<"x=" << x << "," << "y=" <<y;  Swap(x,y);//編譯器生成 void Swap(double &,double&);  std::cout<<"x=" << x << "," << "y=" <<y;  int d[iCount] = {0,1,2,3,4};  int e[iCount] = {5,6,7,8,9};  Swap(d,e,iCount);//匹配新的模版,進行數組的交換  return 0;}//模版類的定義template<typename T>void Swap(T& a,T& b){  T temp;  temp = a;  a = b;  b = temp;}template<typename T>void Swap(T* a,T*b,int n){  for (int i=0;i<iCount;++i)  {    T temp;    temp = a[i];    a[i] = b[i];    b[i] = temp;  }}

如上代碼新增了一個模版,用于交換兩個數組中的元素,原來的模版特征標為(T&,T&),新模版的特征標為(T[],T[]),int)。注意,在后一個模版中,最后一個參數的類型為具體類型(int),而不是通用類型,并非所有的模版參數都必須是模版參數類型。

顯示具體化:

對于給定的函數名,可以有非模版函數,模版函數和顯示具體化模版函數以及它們的重載版本。

顯示具體化的原型和定義應該以template<>打頭,并通過名稱來指出類型。

具體化將覆蓋常規模版,而非模版函數將覆蓋具體化和常規模版。

下面是用于交換Job結構的非模版函數,模版函數和具體化的原型。

void Swap(job &,job&);//非模版函數template <typename T>void Swap(T&,T&);//模版函數template <> void Swap<job>(job&,job&);//顯示具體化函數,其中Swap后的job參數可去掉,則函數簽名為template <> void Swap(job&,job&);

前面指出,如果有多個原型,編譯器在選擇原型時,非模版將優先于顯示具體化和模版版本,而顯示具體化將優先于使用模版生成的版本。

如下面的調用:

double u,v;
Swap(u,v);//使用通用的模版
job a,b;
swap (a,b)//使用顯示具體化版本。

實例化和具體化:

    為了進一步了解模版,必須理解術語實例化和具體化。記住,在代碼中包含函數模版本身并不會生成函數的定義,它只是一個用于生成函數定義的方案。編譯器使用模版為特定類型生成定義時,得到的是模版實例(instantiation)。例如:函數調用Swap(i,j),使編譯器生成一個Swap()的一個實例,該實例使用int類型。模版并非函數定義,但使用int的模版實例是函數定義。這種實例化方式被稱為隱式實例化,因為編譯器之所以知道需要定義,是由于程序調用Swap()時提供了int參數。

    現在編譯器還可以允許顯示實例化,這意味著可以直接命令編譯器生成特定的實例,如Swap<int>。其句法是,聲明所選的種類-用<>符號指示類型,并在聲明前加上關鍵字template:

template void Swap<int>(int,int);//顯示實例化

實現了這種特性的編譯器在看到上述聲明后,將使用Swap()模版生成一個int類型的實例。

與顯示實例化不同的是,顯示具體化使用下面兩個等價聲明的之一:

template <> void Swap<int>(int,int);template <> void Swap(int,int);

區別在于,這些聲明的意思是”不要使用Swap()模版來生成函數定義,而應該使用獨立的、專門的函數定義顯示為int類型生成函數定義。

注意:試圖在一個編程單元中使用同一種類型的顯示具體化與顯示實例化將出錯。

以上所述是小編給大家介紹的C++模版函數詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲在线一区二区| 另类少妇人与禽zozz0性伦| 欧美亚洲另类激情另类| 成人观看高清在线观看免费| 日韩专区在线播放| 亚洲xxxx妇黄裸体| 日韩电影在线观看永久视频免费网站| 欧美午夜美女看片| 欧美日韩中国免费专区在线看| 亚洲第一区在线观看| 欧美成人全部免费| 国产精品成人aaaaa网站| 午夜美女久久久久爽久久| 午夜美女久久久久爽久久| 日韩av电影手机在线| 国产精品丝袜久久久久久不卡| 国产视频久久久久| 欧美裸体xxxx极品少妇| 欧美成人全部免费| 日韩毛片中文字幕| 在线播放国产一区二区三区| 欧美精品久久久久a| 国产做受高潮69| 中文字幕av一区二区三区谷原希美| 日本精品久久久| 蜜月aⅴ免费一区二区三区| 欧美日韩一区二区在线播放| 粉嫩av一区二区三区免费野| 欧美在线一区二区三区四| 国产99久久精品一区二区永久免费| 国产精品日日做人人爱| 日韩av在线电影网| 欧美在线欧美在线| 亚洲天堂成人在线视频| 91在线高清免费观看| 亚洲国产高清自拍| 国产欧美一区二区白浆黑人| 色阁综合伊人av| 精品亚洲一区二区三区四区五区| 国产精品久久一区主播| 综合136福利视频在线| 成人444kkkk在线观看| 97成人精品区在线播放| 色伦专区97中文字幕| 国产精品69久久| 伊人伊成久久人综合网小说| 狠狠躁夜夜躁人人爽天天天天97| 国产日韩欧美在线播放| 精品久久香蕉国产线看观看gif| 欧美日本黄视频| 亚洲国产古装精品网站| 欧美中文字幕视频| 久久精品成人动漫| 日本欧美爱爱爱| 亚洲护士老师的毛茸茸最新章节| 九九精品在线播放| 狠狠躁夜夜躁久久躁别揉| 国产精品三级久久久久久电影| 国产一区二区三区视频| 欧美人交a欧美精品| 欧美性感美女h网站在线观看免费| www.国产精品一二区| 国产成人亚洲综合青青| 91精品久久久久久久久久入口| 亚洲永久在线观看| 亚洲国产成人91精品| 98精品国产高清在线xxxx天堂| 精品动漫一区二区| 国产精品久久久av久久久| 91免费精品国偷自产在线| 岛国精品视频在线播放| 欧美激情中文字幕乱码免费| 亚洲综合视频1区| 97超碰国产精品女人人人爽| 久久99久久久久久久噜噜| 亚洲欧洲一区二区三区在线观看| 国产成人精品av在线| 欧美一级淫片丝袜脚交| 国产精品一区二区久久久久| 狠狠躁夜夜躁人人躁婷婷91| 日韩精品在线免费观看视频| 午夜精品视频网站| 亚洲伊人一本大道中文字幕| 日韩欧美精品在线观看| 欧美国产日韩精品| 国产在线视频91| 国产女人精品视频| 91在线视频免费| 久久久免费高清电视剧观看| 久久久女女女女999久久| 欧美成人网在线| 91精品久久久久久久久久| 三级精品视频久久久久| 亚洲综合日韩中文字幕v在线| 日韩成人在线视频观看| 国产精品偷伦免费视频观看的| 少妇高潮久久久久久潘金莲| 青青草精品毛片| 日韩a**中文字幕| 国产精品久久综合av爱欲tv| 成人中文字幕+乱码+中文字幕| 68精品久久久久久欧美| 久久影视电视剧凤归四时歌| 国产丝袜一区二区| 性欧美暴力猛交69hd| 国产精品欧美日韩| 久久精品在线视频| 在线成人一区二区| 久久亚洲综合国产精品99麻豆精品福利| 国产在线视频91| 国产区精品在线观看| 国产精品专区一| 国产成人精品亚洲精品| 亚洲欧美中文字幕| 国产精品999| 91午夜在线播放| 日韩欧美在线播放| 国产精品自产拍在线观看中文| 在线观看不卡av| 亚洲欧美一区二区三区四区| 国产精品久久一区主播| 91精品视频网站| 亚洲图片欧洲图片av| 黑人巨大精品欧美一区二区三区| 久久久视频免费观看| 亚洲欧美日韩高清| 色综合久久88色综合天天看泰| 日本伊人精品一区二区三区介绍| 日韩精品在线私人| 国产精品高潮粉嫩av| 在线国产精品视频| 欧美成人午夜剧场免费观看| 国产一区二区三区免费视频| 国内精品美女av在线播放| 在线激情影院一区| 九九热这里只有精品免费看| 日韩欧美a级成人黄色| 久久久精品2019中文字幕神马| 欧美中文在线视频| 欧美高清无遮挡| 麻豆精品精华液| 国产视频精品自拍| y97精品国产97久久久久久| 国产精品专区第二| 国产成人精品优优av| 久久久国产在线视频| 国产精品网站视频| 97在线视频免费观看| 精品成人久久av| 国产噜噜噜噜久久久久久久久| 欧美日韩一区免费| 91影院在线免费观看视频| 91手机视频在线观看| 91九色国产视频| 日本精品视频在线观看| 欧美最顶级丰满的aⅴ艳星| 91精品国产99久久久久久| 欧美极品少妇全裸体| 日韩中文在线中文网在线观看| 欧美激情视频一区二区三区不卡| 亚洲精品国产精品国自产观看浪潮| 亚洲欧美国产日韩天堂区| 成人久久18免费网站图片| 日韩专区中文字幕|