向子函数传递一个数组时,数组是不会被拷贝的,一般来说都是传地址给子函数而已。
怎么规范地向子函数传递数组呢,一般来说,我们会给定数组地址,然后告诉子函数数组的长度之类的。
利用函数模板,可以实现不需告诉子函数数组长度,也能安全地使用数组,使用的是非类型模板参数,编译器根据你给定的非类型模板参数,自行推断出对应的数组长度,这个方法更具有普适性。
下面是向子函数传递数组的几个基本用法:
#include <iostream>
using namespace std;
int test1(const double a[],const int *beg ,const int *end)
{
/* 对数组的操作 */
return 0;
}
int test2(const double(&arr)[], const int *beg, const int *end)
{
/* 对数组的操作 */
return 0;
}
int test3(const double(&arr)[5])
{
/* 对数组的操作 */
return 0;
}
template<int N, int M >
int test4( const char (&Arr)[N] , const char (&Brr)[M])
{
/* 对数组的操作 */
return 0;
}
int main()
{
double Arr[5] = { 1,2,3,4,5 };
cout << end(Arr) - begin(Arr) << endl;
cout << begin(Arr) << endl;
cout << end(Arr) << endl;
return 0;
}