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

首頁(yè) > 編程 > C++ > 正文

C++可變參數(shù)的函數(shù)與模板實(shí)例分析

2020-05-23 14:22:09
字體:
供稿:網(wǎng)友

本文實(shí)例展示了C++可變參數(shù)的函數(shù)與模板的實(shí)現(xiàn)方法,有助于大家更好的理解可變參數(shù)的函數(shù)與模板的應(yīng)用,具體內(nèi)容如下:

首先,所謂可變參數(shù)指的是函數(shù)的參數(shù)個(gè)數(shù)可變,參數(shù)類型不定的函數(shù)。為了編寫能處理不同數(shù)量實(shí)參的函數(shù),C++提供了兩種主要的方法:如果所有的實(shí)參類型相同,可以傳遞一個(gè)名為initializer_list的標(biāo)準(zhǔn)庫(kù)類型;如果實(shí)參的類型不同,我們可以編寫可變參數(shù)模板。另外,C++還有一種特殊的省略符形參,可以用它傳遞可變數(shù)量的實(shí)參,不過這種一般只用于與C函數(shù)交互的接口程序。

一、可變參數(shù)函數(shù)

1、initializer_list形參

如果函數(shù)的實(shí)參數(shù)量未知但是全部實(shí)參的類型都相同,我們可以使用initializer_list類型的形參(C++11新標(biāo)準(zhǔn))。和vector一樣,initializer_list也是一種模板類型。下面看看initializer_list提供的一些操作:

#include<initializer_list> // 頭文件 initializer_list<T> lst;  // 默認(rèn)初始化,T類型元素的空列表 initializer_list<T> lst{a,b,c...}; // 初始化為初始值列表的副本 lst2(lst)   // 拷貝或賦值不會(huì)拷貝列表中的元素;拷貝后, lst2 = lst  // 原始列表和副本共享元素 lst.size()  // 列表中的元素?cái)?shù)量 lst.begin()  // 返回指向lst中首元素的指針 lst.end()   // 返回指向lst中尾元素下一位置的指針

下面給出一個(gè)例子,需要注意的是,含有initializer_list形參的函數(shù)也可以同時(shí)擁有其他形參。另外,如果想給initializer_list形參傳遞一個(gè)實(shí)參的序列,必須把序列放在一對(duì)花括號(hào)內(nèi):

string func(initializer_list<string> li) {   string str("");   for(auto beg=li.begin(); beg!=li.end(); ++beg)     str += *beg;   return str; }  int main() {   cout << func({"This"," ","is"," ","C++"}) << endl;   return 0; } 

2、省略符形參

函數(shù)可以用省略符形參”…“表示不定參數(shù)部分,省略符形參只能出現(xiàn)在形參列表的最后一個(gè)位置,它的形式如下:

void foo(parm_list, ...); // 典型例子 int printf(const char* format, ...) 

省略符形參應(yīng)該僅僅用于C和C++通用的類型,因?yàn)榇蠖鄶?shù)類類型的對(duì)象在傳遞給省略符形參時(shí)都無(wú)法正確拷貝。下面是<cstdarg>頭文件中的幾個(gè)宏定義:

#include<cstdarg> // C中是<stdarg.h>  // va_list是一種數(shù)據(jù)類型,args用于持有可變參數(shù)。 // 定義typedef char* va_list; va_list args;  // 調(diào)用va_start并傳入兩個(gè)參數(shù):第一個(gè)參數(shù)為va_list類型的變量 // 第二個(gè)參數(shù)為"..."前最后一個(gè)參數(shù)名 // 將args初始化為指向第一個(gè)參數(shù)(可變參數(shù)列表) va_start(args, paramN);  // 檢索參數(shù),va_arg的第一個(gè)參數(shù)是va_list變量,第二個(gè)參數(shù)指定返回值的類型 // 每一次調(diào)用va_arg會(huì)獲取當(dāng)前的參數(shù),并自動(dòng)更新指向下一個(gè)可變參數(shù)。 va_arg(args,type);  // 釋放va_list變量 va_end(args);

下面給出一個(gè)例子:

int add_nums(int count,...) {   int result = 0;      va_list args;   va_start(args, count);   for(int i=0; i<count; ++i)     result += va_arg(args, int);   va_end(args);   return result; }  int main() {   cout << add_nums(4, 25, 25, 50, 50) << endl;   return 0; } 

編譯器是將參數(shù)壓入棧中進(jìn)行傳遞的。傳遞實(shí)參的時(shí)候,編譯器會(huì)從實(shí)參列表中,按從右到左的順序?qū)?shù)入棧,對(duì)于add_nums(4, 25, 25, 50, 50)的調(diào)用,則入棧的順序是 50, 50, 25, 25, 4 (注意沒有可變參數(shù)與不可變參數(shù)之分)。由于棧的地址是從高到低的,所以在知道了第一個(gè)參數(shù)地址和參數(shù)的類型之后,就可以獲取各個(gè)參數(shù)的地址。

二、可變參數(shù)模板

一個(gè)可變參數(shù)模板(variadic template)就是一個(gè)接受可變數(shù)目參數(shù)的模板函數(shù)或模板類??勺償?shù)目的參數(shù)被稱為參數(shù)包(parameter packet)。存在兩種參數(shù)包:模板參數(shù)包(表示零個(gè)或多個(gè)模板參數(shù))和函數(shù)參數(shù)包(表示零個(gè)或多個(gè)函數(shù)參數(shù))。

上述說到我們可以使用一個(gè)initializer_list來定義一個(gè)可接受可變數(shù)目實(shí)參的函數(shù),但是所有實(shí)參必須具有相同的類型。當(dāng)我們既不知道要處理的實(shí)參數(shù)目也不知道它們的類型時(shí),我們就需要使用可變參數(shù)的函數(shù)模板了。我們用一個(gè)省略號(hào)來指出一個(gè)模板參數(shù)或函數(shù)參數(shù)表示一個(gè)包:在一個(gè)模板參數(shù)列表中,class...或typename...指出接下來的參數(shù)表示零個(gè)或多個(gè)類型的列表;一個(gè)類型名后面跟一個(gè)省略號(hào)表示零個(gè)或多個(gè)給定類型的非類型參數(shù)的列表。在函數(shù)參數(shù)列表中,如果一個(gè)參數(shù)的類型是一個(gè)模板參數(shù)包,則此參數(shù)也是一個(gè)函數(shù)參數(shù)包。

// Args是一個(gè)模板參數(shù)包;rest是一個(gè)函數(shù)參數(shù)包 template <typename T, typename...Args> void foo(const T &t, const Args&...rest); 

可變參數(shù)函數(shù)模板通常是遞歸的。第一步調(diào)用處理包中的第一個(gè)實(shí)參,然后用剩余的實(shí)參調(diào)用自身。為了終止遞歸,我們還需要定義一個(gè)非可變參數(shù)的函數(shù)模板:

// 用來終止遞歸并處理包中最后一個(gè)元素 template <typename T> void print(const T &t) {   cout << t; }  // 包中除了最后一個(gè)元素之外的其他元素都會(huì)調(diào)用這個(gè)版本的print template <typename T, typename...Args> void print(const T &t, const Args&...rest) {   cout << t << " ";   // 打印第一個(gè)實(shí)參   print(rest...);    // 遞歸調(diào)用,打印其他實(shí)參 }  // 測(cè)試 int main() {   print("string1", 2, 3.14f, "string2", 42);   cout << endl;   return 0; } 

非可變參數(shù)版本的print負(fù)責(zé)終止遞歸并打印初始調(diào)用中的最后一個(gè)實(shí)參。對(duì)于最后一次遞歸調(diào)用print(42),兩個(gè)print版本都是可行的。但是,非可變參數(shù)模板比可變參數(shù)模板更特例化,因此編譯器選擇非可變參數(shù)版本。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
伊人中文在线| 蜜桃精品一区二区| 在线观看av中文| 亚洲一区二区三区四区五区| 国产精品99久久不卡二区| 日韩一区二区免费电影| 51自拍视频在线观看| 自拍偷拍99| 翔田千里一区二在线观看| 日韩在线视频网址| 亚洲一区二区三区观看| 国产精品女同互慰在线看| 欧美一级大片在线观看| jizzjizz国产| 国产99视频精品免费视频36| 免费99精品国产自在在线| 日韩精品中文字幕一区二区| 丰满的少妇愉情hd高清果冻传媒| 精品中文字幕一区二区三区| 欧美日韩视频第一区| 色综合婷婷久久| 少妇丰满尤物大尺度写真| 亚洲的天堂在线中文字幕| 色欲人妻综合网| 亚洲国产精品小视频| 国产传媒一区二区| 日韩一区有码在线| 亚洲一区二区成人| 亚洲男帅同性gay1069| 亚洲精品免费在线播放| www.精品国产| 91国产中文字幕| 亚洲美女www午夜| 人妻内射一区二区在线视频| 国产三级在线免费| 在线不卡欧美| 精品国语对白精品自拍视| 天天干天天操天天爽| 中文字幕日韩一区二区不卡| 日韩av成人在线观看| av在线综合网| 国产免费无码一区二区| 激情综合丁香五月| 欧美一级二级三级视频| 国产精品乱码一区二三区小蝌蚪| 久久久久久国产视频| se01亚洲视频| 久久亚洲精品一区| avtt天堂资源网站| 亚洲高清无码久久| 日韩人妻精品无码一区二区三区| 色涩成人影视在线播放| 亚洲一区二区精品视频| 午夜日韩电影| 久久国产精品高清| 亚洲一区二区三区高清不卡| 免费看美女视频在线网站| 5月婷婷6月丁香| 欧美成人全部免费| 99久久伊人精品| 中文字幕av免费在线观看| 天堂a中文在线| 亚洲国产成人精品久久久国产成人一区| 三级在线免费看| 成人免费在线视频播放| 成人一级毛片| jazzjazz国产精品久久| 日韩成人中文字幕在线观看| 成年人在线观看av| 首页亚洲中字| 9999在线精品视频| 黄瓜视频在线观看| 亚洲天堂一区二区在线观看| 欧美白人最猛性xxxxx69交| 久久国产精品久久w女人spa| 狠狠狠狠狠狠操| 精品久久久久久久久久久久包黑料| 欧洲亚洲精品视频| 亚洲 欧美 日韩 国产综合 在线| www.8ⅹ8ⅹ羞羞漫画在线看| 无码人妻少妇色欲av一区二区| 国产精彩视频在线观看| 精品国精品国产尤物美女| 最新中文字幕免费| 久久精品视频99| 精彩视频一区二区三区| 九义人在线观看完整免费版电视剧| 欧美激情一区二区三区不卡| 国产三级精品视频| 久久er热在这里只有精品66| 亚洲影视一区二区| 久99久视频| 成人一级视频| 午夜精品久久久久久久99老熟妇| 亚洲精品久久久久久久久久| 欧美日韩午夜| 婷婷五月综合激情| 激情视频一区二区三区| 国模吧一区二区三区| 久久国产精品99久久人人澡| 男男视频在线观看网站| 五月天中文字幕在线| 欧美国产日韩免费| 国产欧美一区二区三区另类精品| 国产欧美日韩精品在线| 亚洲天堂aaa| 老司机免费视频| 久久久久久久久久婷婷| 最近97中文超碰在线| 多野结衣av一区| 国模视频一区二区| 7777精品伊人久久久大香线蕉最新版| 电影91久久久| 九义人在线观看完整免费版电视剧| 少妇一区视频| 先锋影音男人站| 性生活视频网址| 国产精品第一页在线| 手机在线电影一区| 美女色狠狠久久| 久久亚洲精精品中文字幕| 久久久久亚洲av无码专区喷水| 精品一区二区久久久久久久网站| 久久亚洲成人av| 免费亚洲一区二区| 中文字幕免费精品| 欧美精品午夜视频| 99久久久无码国产精品免费蜜柚| 香蕉成人啪国产精品视频综合网| 91蝌蚪国产九色| av成人综合网| 亚洲熟妇无码另类久久久| 国产成人精品一区二三区| av中文字幕在线观看第一页| 米奇精品一区二区三区在线观看| 天堂va欧美va亚洲va老司机| 欧美 国产 日本| 国产日韩精品推荐| 久久久久久香蕉| 黄色av片三级三级三级免费看| 一广人看www在线观看免费视频| 99久久精品国产一区二区成人| 成人网站免费观看入口| 国产男人精品视频| 偷拍自拍亚洲色图| 神宫寺奈绪一区二区三区| 网站黄在线观看| 蜜臀久久99精品久久久久久宅男| 91蜜桃网址入口| 日韩高清中文字幕一区二区| 日本精品999| 天天操天天干视频| 亚洲а∨天堂久久精品2021| aa视频在线免费观看| 国产精品永久入口久久久| 国产精品一区二| 天堂在线一二区| 精品国产电影一区二区| 国产三级三级在线观看| 欧产日产国产69| 国产精品伦一区二区三级视频| 亚洲AV无码片久久精品| 欧美1819sex性处18免费| 久久久久久国产精品视频| 91精品成人久久| 成人免费视频观看视频| 很黄的网站在线观看| 女性女同性aⅴ免费观女性恋| 成视频在线观看免费观看| 国产高潮又爽又无遮挡又免费| 美国一级片在线观看| 亚洲精品国产高清久久伦理二区| 中文字幕2022永久在线| 亚洲色图日韩av| 国产精品的网站| 久久久久国产一区| 日本一区二区三区在线观看| 国产伦精品一区二区三区| 男女猛烈无遮挡午夜视频| 欧美日韩一区二区不卡| 亚洲欧美国产另类| av在线不卡一区| 亚洲天堂av综合网| 亚洲尤物精选| 国产精品一区二区三区美女| 精品视频在线观看一区| 中国女人一级一次看片| 韩日av一区二区| 超碰中文字幕在线观看| 99国产精品国产精品久久| 国产成a人亚洲精v品在线观看| 国产又粗又猛又黄又爽无遮挡| 91视频久久| www日韩中文字幕在线看| 亚洲女同志freevdieo| free性丰满69性欧美| 欧美日韩女优| 三日本三级少妇三级99| 国产农村妇女毛片精品久久莱园子| 青娱乐自拍偷拍| www.尤物.com| 自拍偷拍亚洲综合| 色噜噜在线网| 91尤物视频在线观看| 国产又爽又黄又舒服又刺激视频| 丰满放荡岳乱妇91ww| 在线观看高清av| 欧美黑人经典片免费观看| 极品白浆推特女神在线观看| 亚洲资源在线| 日本亚洲最大的色成网站www| 中文字幕中文字幕一区三区| 一区二区国产在线观看| 中文字幕久久久av一区| 亚洲精品一二三区区别| 国产免费一区二区三区视频| 中文字幕第38页| 午夜欧美不卡精品aaaaa| 偷窥自拍欧美色图| 日韩电影在线视频| 99成人免费视频| 中文字幕日韩高清在线| 国产精品夜夜嗨| 国产av 一区二区三区| 欧美伊人影院| 天堂资源最新版在线视频观看免费网| 欧美videos另类齐全| 伊人色综合一区二区三区影院视频| 中文字幕1234区| 国产日韩欧美黄色| xxxxx中文字幕| 91成人在线精品视频| 中出一区二区| 亚洲高清影院| 生活片a∨在线观看| 四虎影院中文字幕| 国产精品传媒精东影业在线| 色88久久久久高潮综合影院| 国产伦理一区| 国产精品福利网| 国产真人无遮挡作爱免费视频| 亚洲精品二三区| 欧美熟妇激情一区二区三区| 国产精品10p综合二区| 国产网红女主播精品视频| 日本啊v在线| www.久久精品视频| 成人影院在线观看视频| 国产剧情久久久| 成人国产精品久久久网站| 人人精品人人爱| 国产一区视频观看| 99视频在线观看免费| 中文字幕亚洲在线观看| 欧美日韩亚洲一二三| 亚洲黄色片免费| 欧美中文字幕精在线不卡| 国产精品久久久久久久免费观看| 亚洲高清一区二区三区| 欧美经典影片视频网站| 亚洲永久免费观看| 黄色免费在线播放| 香蕉久久免费电影| 夜夜爽妓女8888视频免费观看| 尤物av一区二区| 97香蕉久久夜色精品国产| 在线日韩网站| 一区二区三区四区视频| 欧美激情综合五月色丁香小说| 超碰一区二区| 国产精品字幕| 欧美极品少妇全裸体| 在线日韩一区二区| 92久久精品| 国产欧美视频一区二区| 九色91在线| 午夜视频在线观看一区二区三区| 欧美成人免费高清视频| 国产欧美一区二| 精品一区2区三区| 亚洲少妇第一页| 日韩精品一区在线| 老鸭窝91久久精品色噜噜导演| 狠久久av成人天堂| 2020国产精品久久精品美国| 亚洲五月六月| 视频在线99| 欧美一区二粉嫩精品国产一线天| 色婷婷久久久亚洲一区二区三区| 亚洲成人第一区| 欧美国产视频在线| 一区二区免费在线| 一本色道久久综合亚洲精品酒店| 夜夜骑天天操| 国产一区久久| 日韩av二区在线播放| 亚洲图片 自拍偷拍| 99九九99九九九99九他书对| 亚洲激情视频在线观看| 亚洲ⅴ国产v天堂a无码二区| 亚洲一区二区三区四区的| 9191在线观看| 久久久久久日产精品| 日韩av电影免费观看高清完整版| 美女羞羞视频在线观看| 一区二区三区不卡视频在线观看| 黄色在线论坛| 成人听书哪个软件好| 91精品在线免费观看| 色综合 综合色| 欧美日韩在线另类| 一本大道伊人av久久综合| www精品美女久久久tv| 好男人www社区在线视频夜恋| 奇米色一区二区三区四区| 桃花视频大全不卡免费观看网站| 每日更新av在线播放| 97久久精品人人做人人爽50路| 欧美激情国产高清| 奇米亚洲午夜久久精品| 精品日韩在线| 久久精品伊人| 久久观看最新视频| 免费在线看黄色片| 国产午夜精品一区二区三区视频| 久草影视在线| 国产美女视频黄a视频免费| 日韩欧美在线网站|