c ++数组语法(函数返回数组)

时间:2013-05-07 07:35:28

标签: c++ arrays

为什么此代码需要'&'在数组语法?

int (&returnArray(int (&arr)[42]))[42]
{
  return arr;
}

当我宣布这样的时候

int (returnArray(int arr[42]))[42]
{
  return arr;
}

我得到了

error C2090: function returns array

但这不是第一个例子中返回的数组吗?它是某种对数组的引用吗?

我知道我也可以将一个数组传递给一个函数,它会衰减到一个指针

int returnInt(int arr[42])
{
  return arr[0];
}

或通过引用传递

int returnInt(int (&arr)[42])
{
  return arr[0];
}

但为什么我不能以与传递相同的方式返回数组?

2 个答案:

答案 0 :(得分:6)

int (&returnArray(int (&arr)[42]))[42]

第一个&表示这会将引用返回给数组。

标准要求这样做:

  

8.3.5功能§6 -

     

«函数不应具有类型数组或函数的返回类型,   虽然它们可能有返回类型的指针或引用类型   这样的事情。 »

答案 1 :(得分:3)

第一个函数没有返回一个数组,它将一个引用返回给一个数组。在C ++中,不能通过值返回数组。

这些主题通常在good C++ books中有详细介绍。