您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++11的initializer_list形參怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“C++11的initializer_list形參怎么使用”吧!
C語(yǔ)言中的可變參數(shù)
編程過(guò)程中經(jīng)常會(huì)遇到希望函數(shù)的參數(shù)可變的情況,一個(gè)最常見(jiàn)的例子就是神奇的printf函數(shù),它可以根據(jù)用戶(hù)的需要調(diào)整參數(shù)的個(gè)數(shù)。其實(shí)我們自己也可以設(shè)計(jì)可變參數(shù)的函數(shù)。例如下面的函數(shù)就可以根據(jù)第一個(gè)參數(shù)決定輸入?yún)?shù)的個(gè)數(shù)。
int test(int num, ...)
{
int i, result = 0;
va_list parlist;
va_start(parlist, num); //準(zhǔn)備參數(shù)列表
for (i = 0; i < num; i++)
{
//取得每個(gè)參數(shù),類(lèi)型由av_arg的第二個(gè)參數(shù)決定
printf("%d\n", va_arg(parlist, int));
}
va_end(parlist);//關(guān)閉參數(shù)列表
return result;
}
test的后續(xù)參數(shù)個(gè)數(shù)由第一個(gè)參數(shù)number決定。有了這樣的test函數(shù),就可以根據(jù)需要決定參數(shù)的個(gè)數(shù)了。下面的代碼都可以正常動(dòng)作:
test(2, 10, 20);
test(4, 1, 2, 3, 4);
C++11中的可變參數(shù)
C++11在標(biāo)準(zhǔn)庫(kù)中提供了initializer_list類(lèi),用于處理參數(shù)數(shù)量可變但類(lèi)型相同的情況。使用initializer_list最常用的方式是通過(guò)大括號(hào)包圍的值列表對(duì)其進(jìn)行初始化:
initializer_list<int> vlist{9, 8, 7, 6};
除了不能修改vlist中的值以外,可以像一般的list一樣使用。
繼續(xù)看下面的函數(shù):
template<typename T>
void output(initializer_list<T> lst)
{
for(auto &a : lst){
cout << a << endl;
}
}
這個(gè)函數(shù)很簡(jiǎn)單,就是輸出list中的內(nèi)容,它有幾個(gè)特點(diǎn):
通過(guò)模版,auto的使用,是它可以自動(dòng)適應(yīng)參數(shù)的類(lèi)型
通過(guò)initializer_list的使用,自動(dòng)適應(yīng)參數(shù)的個(gè)數(shù)。
函數(shù)弄好以后,怎么使用就可以看心情了。
initializer_list<int> vlist{9, 8, 7, 6};
output(vlist);
output({1, 3, 4, 5});
output({"How", "are", "you", "!"});
感謝各位的閱讀,以上就是“C++11的initializer_list形參怎么使用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)C++11的initializer_list形參怎么使用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。