我在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]
。