2013-05-07 221 views
3

爲什麼此代碼在數組語法中需要'&'?C++數組語法(函數返回數組)

int (&returnArray(int (&arr)[42]))[42] 
{ 
    return arr; 
} 

當我宣佈它像這樣

int (returnArray(int arr[42]))[42] 
{ 
    return arr; 
} 

我得到

error C2090: function returns array 

但不是這樣的數組它是在第一個例子返回?這是否是對數組的一種引用?

我知道我還可以傳遞一個數組給一個函數,它就會衰變爲指針

int returnInt(int arr[42]) 
{ 
    return arr[0]; 
} 

或引用

int returnInt(int (&arr)[42]) 
{ 
    return arr[0]; 
} 

通過它,但我爲什麼不能返回數組可以通過相同的方式嗎?

+0

@john我猜所有值得用鹽的C++書籍都應該提及數組值的語義。 – Angew 2013-05-07 07:42:34

+0

[爲什麼C++不支持函數返回數組?]可能的重複(http://stackoverflow.com/questions/5157439/why-doesnt-c-support-functions-returning-arrays) – 2013-05-07 07:46:49

+0

我試圖編輯問題以表明它與那個 – spiritwolfform 2013-05-07 08:03:21

回答

5
int (&returnArray(int (&arr)[42]))[42] 

第一&裝置將返回到陣列的參考

這是通過標準要求:

8.3.5功能§6 -

«功能不應有類型的陣列或功能, 的返回類型,儘管它們可以具有返回類型的指針或引用 這樣的東西。 »

+0

有點不同,這是否合理?因爲將數組作爲參數傳遞**會衰減到指針中?從而暗示原始類型始終是「數組」而不是指針,因此不能期望它可作爲指針類型返回?所以這反映了爲什麼我們會衰變的奇怪之處。 – 2015-04-23 05:16:29

3

第一個函數未返回數組,它將引用返回給數組。數組不能以C++的值返回。

這些主題通常涵蓋在good C++ books