2012-11-05 81 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]

相关问题