以下两个函数test1和test2
之间是否有任何区别static int const MAXL = 3;
void test1(int t[MAXL])
{
for (int i = 0; i < MAXL; ++i)
t[i] = 10;
}
void test2(int (&t)[MAXL])
{
for (int i = 0; i < MAXL; ++i)
t[i] = 10;
}
通过我在MSVC2008中的测试,两个函数都修改了输入数组值。它们的功能似乎都是相同的。
任何人都可以提供一个需要在函数参数中引用数组的情况吗?
答案 0 :(得分:5)
第一个衰减到指向数组中第一个元素的指针,第二个是对数组的实际引用。
它们的不同之处在于指针和引用通常不同。
具体来说,在数组的情况下,对数组的引用很有用,因为您可以保留确定数组大小的功能。这使您不必像在C API中那样将数组的大小/长度作为单独的参数传递。
实现这一点的一种方法,我认为特别光滑涉及模板。使用模板参数,您可以让编译器自动推导出数组的大小。例如:
void ProcessArray(int* pArray, std::size length)
{
for (std::size_t i = 0; i < length; ++i)
{
// do something with all elements in array
}
}
template <std::size_t N>
void ProcessArray(int (&array)[N])
{
ProcessArray(array, N);
}