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

spi*_*orm 5 c++ arrays

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

int (&returnArray(int (&arr)[42]))[42]
{
  return arr;
}
Run Code Online (Sandbox Code Playgroud)

当我宣布这样的时候

int (returnArray(int arr[42]))[42]
{
  return arr;
}
Run Code Online (Sandbox Code Playgroud)

我明白了

error C2090: function returns array
Run Code Online (Sandbox Code Playgroud)

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

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

int returnInt(int arr[42])
{
  return arr[0];
}
Run Code Online (Sandbox Code Playgroud)

或通过引用传递它

int returnInt(int (&arr)[42])
{
  return arr[0];
}
Run Code Online (Sandbox Code Playgroud)

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

zak*_*ter 6

int (&returnArray(int (&arr)[42]))[42]
Run Code Online (Sandbox Code Playgroud)

第一种&方法是返回对数组的引用.

这是标准要求:

8.3.5功能§6 -

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