在C ++中按值传递数组和引用之间的区别

时间:2013-07-10 03:32:27

标签: c++

以下两个函数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中的测试,两个函数都修改了输入数组值。它们的功能似乎都是相同的。

任何人都可以提供一个需要在函数参数中引用数组的情况吗?

1 个答案:

答案 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);
}
相关问题