2012-11-05 169 views
1

我在C++的庫中找到了一個函數,我不能告訴被傳入的參數的類型,所以我的知識和理解完成了它會對我來說是有益的。傳遞到這個函數中的參數是什麼類型

對我來說,他們看起來像函數指針數組,但沒有*,我是否在我的假設?

template < typename _Tp , size_t _Nm > 
inline void swap (_Tp (& __a) [ _Nm ] , _Tp (& __b) [ _Nm ]) 

回答

3

兩個參數的類型都是相同的。它們是對長度爲_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])

2

他們到對象類型_Tp和大小_Nm的數組引用。

讀取C或C++類型的正確方法是該聲明反映了使用情況。 _Tp (& __a) [ _Nm ]表示給定這種類型的變量__a,可以使用0 <= n < _Nm編寫(__a)[n],並獲得_Tp類型的對象。 &類型修飾符的存在類似於*修飾符;聲明爲_Tp (* __a) [ _Nm ]的變量將是指向數組的指針,因爲您可以編寫(*__a)[n]

相關問題