5

为什么这段代码需要数组语法中的“&”?

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];
}

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

4

2 回答 2

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

第一个&意味着这将返回对数组的引用。

这是标准要求的:

8.3.5 功能§6 -

«函数不应具有类型数组或函数的返回类型,尽管它们可能具有类型指针或对此类事物的引用的返回类型。»

于 2013-05-07T07:40:37.077 回答
3

第一个函数不是返回数组,而是返回对数组的引用。在 C++ 中,数组不能按值返回。

好的 C++ 书籍通常很好地涵盖了这些主题。

于 2013-05-07T07:41:44.747 回答