我在C++的庫中找到了一個函數,我不能告訴被傳入的參數的類型,所以我的知識和理解完成了它會對我來說是有益的。傳遞到這個函數中的參數是什麼類型
對我來說,他們看起來像函數指針數組,但沒有*,我是否在我的假設?
template < typename _Tp , size_t _Nm >
inline void swap (_Tp (& __a) [ _Nm ] , _Tp (& __b) [ _Nm ])
我在C++的庫中找到了一個函數,我不能告訴被傳入的參數的類型,所以我的知識和理解完成了它會對我來說是有益的。傳遞到這個函數中的參數是什麼類型
對我來說,他們看起來像函數指針數組,但沒有*,我是否在我的假設?
template < typename _Tp , size_t _Nm >
inline void swap (_Tp (& __a) [ _Nm ] , _Tp (& __b) [ _Nm ])
兩個參數的類型都是相同的。它們是對長度爲_Nm
的數組的引用,其中每個元素的類型爲_Tp
。元素的類型和數組的長度必須在兩個參數中匹配。考慮類型的參數和arrRef在下面的示例中的類型之間的相似性:
int arr1[] = {1, 2, 3, 4, 5};
int (&arrRef)[5] = arr1; // arrRef is a reference to arr1
例如,如果我們有以下幾點:
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {6, 7, 8, 9, 10};
swap(arr1, arr2);
我們實例化一個版本的swap
與簽名void swap(int (&)[5], int (&)[5])
。
他們到對象類型_Tp
和大小_Nm
的數組引用。
讀取C或C++類型的正確方法是該聲明反映了使用情況。 _Tp (& __a) [ _Nm ]
表示給定這種類型的變量__a
,可以使用0 <= n < _Nm
編寫(__a)[n]
,並獲得_Tp
類型的對象。 &
類型修飾符的存在類似於*
修飾符;聲明爲_Tp (* __a) [ _Nm ]
的變量將是指向數組的指針,因爲您可以編寫(*__a)[n]
。