2015-10-22 81 views
0

我正在閱讀有關C++,發現當我們通過引用傳遞數組時,不會發生數組到正常非常量指針轉換(技術上稱爲衰減)。這個限制背後有什麼理由嗎?爲什麼C++數組衰減不會發生?

我知道,在C99有三個基本情況陣列衰變情況,即:

當它是&(地址)的運營商的說法。

它是sizeof運算符的參數。

當它是char [N + 1]類型的字符串文字或wchar_t [N + 1]類型的寬字符串文字(N是字符串的長度)時,用於初始化數組,如char str [] =「foo」;或wchar_t wstr [] = L「foo」;.

此外,在C11中,新引入的alignof運算符不會讓其數組參數衰減到指針中。

在C++中,還有其他規則,例如,當它通過引用傳遞時。

謝謝

+2

你會期望它衰減到什麼程度? – juanchopanza

+0

我不確定問題是什麼是把這個限制背後的理由,在一些情況下,使得事情很難像正常的複製操作模板無效複製(常量T&A,常量T&B)此模板將調用時會出現錯誤複製「STACK」,「STACKOVERFLOW」), – anonymous

+3

首先你必須解釋你說的是什麼限制。 – juanchopanza

回答

0

簡單的答案是類型安全,這是一個C++的支柱。在某些情況下,衰減的唯一原因是C兼容性。

+1

無論如何通過引用傳遞數組會衰減數組意味着什麼? – juanchopanza

+0

@juanchopanza你得到一個const指針指針? –

+0

@PeterSchneider然後數組不會被引用傳遞。 – juanchopanza

1

陣列到指針的衰減產生右值。所以,由於顯而易見的原因,它在右值環境中才有意義。

引用上下文自然是左值上下文,這就是爲什麼數組到指針的衰減在這樣的上下文中沒有任何意義。