1

我在 C++ 的库中找到了一个函数,但我无法分辨传入的参数的类型,所以我的知识和理解是完整的,我知道这对我有好处。

对我来说,它们看起来像函数指针数组,但没有 *,我的假设是否正确?

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

2 回答 2

3

两个参数的类型相同。它们是对长度数组的引用,_Nm其中每个元素都是 type _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])

于 2012-11-05T11:03:07.407 回答
2

它们是对对象类型_Tp和大小数组的引用_Nm

读取 C 或 C++ 类型的正确方法是声明反映使用。 _Tp ( & __a ) [ _Nm ]表示给定一个__a该类型的变量,您可以编写(__a)[n]、使用0 <= n < _Nm和获取类型的对象_Tp。类型修饰符的存在与&修饰符类似*;声明为的变量_Tp ( * __a ) [ _Nm ]将是指向数组的指针,因为您可以编写(*__a)[n].

于 2012-11-05T11:03:01.947 回答