我在 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
其中每个元素都是 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])
。
它们是对对象类型_Tp
和大小数组的引用_Nm
。
读取 C 或 C++ 类型的正确方法是声明反映使用。 _Tp ( & __a ) [ _Nm ]
表示给定一个__a
该类型的变量,您可以编写(__a)[n]
、使用0 <= n < _Nm
和获取类型的对象_Tp
。类型修饰符的存在与&
修饰符类似*
;声明为的变量_Tp ( * __a ) [ _Nm ]
将是指向数组的指针,因为您可以编写(*__a)[n]
.