传递给此函数的参数类型是什么

时间:2012-11-05 11:01:19

标签: c++ parameters

我在c ++中的库中找到了一个函数,我无法分辨传入的参数的类型,所以我的知识和理解是完整的,这对我来说很有用。

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

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

2 个答案:

答案 0 :(得分: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])版本。

答案 1 :(得分:2)

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

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