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





