返回類型后置
除了構(gòu)造函數(shù)和析構(gòu)函數(shù)以外,函數(shù)聲明都需要明確函數(shù)的返回類型,在傳統(tǒng)的C或者C++中,函數(shù)聲明大致是這個(gè)樣子:
int getSum(int a, int b);
第一個(gè)int就是函數(shù)的返回類型,它表明函數(shù)的返回值類型為整數(shù)。在新的C++11以后,我們也可以這樣聲明:
auto getSum(int a, int b)->int;
在原來放返回值類型的位置寫auto,在函數(shù)聲明結(jié)束以后接一個(gè)'->'再跟著寫函數(shù)的返回值類型。兩種方式的效果是一樣的。
返回?cái)?shù)組指針
一般情況下,當(dāng)函數(shù)要返回多個(gè)數(shù)據(jù)時(shí),會(huì)選擇將數(shù)據(jù)封裝在類(或結(jié)構(gòu)體)中返回,或者直接返回一個(gè)指針。
這兩種方式要么麻煩,要么沒有辦法取得數(shù)據(jù)的數(shù)量。其實(shí)我們真正的需求就是返回一個(gè)數(shù)組(可以計(jì)算維度的)指針。這種方法是存在的:
int?(*getResultArray(int?mode))[10];
通過上面的形式,聲明了一個(gè)返回包含10個(gè)整數(shù)的數(shù)組的指針。對(duì)于這樣一個(gè)指針,我們可以像數(shù)組一樣使用:
auto?arr?=?getResultArray(1);
cout?<<?sizeof(*arr)/sizeof(**arr)?<<?endl; //可以正確計(jì)算維度。
當(dāng)然, 有經(jīng)驗(yàn)的程序員會(huì)這么做:
typedef?int?arr10[10];
arr10*?getResultArray(int?mode)
C++11增加了返回類型后置以后,我們有了新的選擇:
auto?getResultArray(int?mode)->int(*)[10];
比第一種形式容易理解很多。也不需要自定義類型。
作者觀點(diǎn)
先當(dāng)工具收著,今后一定有更大的用處。