为什么此代码需要'&'在数组语法?
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];
}
但为什么我不能以与传递相同的方式返回数组?
答案 0 :(得分:6)
int (&returnArray(int (&arr)[42]))[42]
第一个&
表示这会将引用返回给数组。
标准要求这样做:
8.3.5功能§6 -
«函数不应具有类型数组或函数的返回类型, 虽然它们可能有返回类型的指针或引用类型 这样的事情。 »
答案 1 :(得分:3)
第一个函数没有返回一个数组,它将一个引用返回给一个数组。在C ++中,不能通过值返回数组。
这些主题通常在good C++ books中有详细介绍。