我想了解類型衰減的性質。例如,我們都知道數組在特定的上下文中衰變成指針。我的嘗試是瞭解int[]
等於int*
但二維數組如何與預期的指針類型不匹配。下面是測試情況:爲什麼int * []衰減爲int **而不是int [] []?
std::is_same<int*, std::decay<int[]>::type>::value; // true
此預期返回true,但這並不:
std::is_same<int**, std::decay<int[][1]>::type>::value; // false
爲什麼這是不是真的?我終於找到了一種方法,使其返回true,這是通過使第一維指針:
std::is_same<int**, std::decay<int*[]>::type>::value; // true
和斷言的任何類型的指針,但最後被數組也是如此。例如(int***[] == int****; // true
)。
我可以解釋爲什麼會發生這種情況嗎?爲什麼數組類型不像預期的那樣對應於指針類型?
+1。好答案。 – Nawaz
+1簡潔的解釋。 –
另一種看待這個問題的方法是:'int [M] [N]'到'int **'需要兩次轉換(這是不允許的),而不是一次轉換(這是允許的)。第一次轉換需要從'int [M] [N]'轉換爲*指針*到數組的第一個元素。 [first]元素的類型是'int [N]',因此'int [M] [N]'首先轉換成'int(*)[N]',然後需要轉換成'int **' * inner *數組的第一個元素'int [N]'轉換爲'int *'。 – Nawaz