C++ c++;数组语法(函数返回数组)
为什么这段代码需要数组语法中的“&”C++ c++;数组语法(函数返回数组),c++,arrays,C++,Arrays,为什么这段代码需要数组语法中的“&” int (&returnArray(int (&arr)[42]))[42] { return arr; } 当我这样宣布的时候 int (returnArray(int arr[42]))[42] { return arr; } 我明白了 但在第一个示例中,它不是返回了一个数组吗?它是对数组的某种引用吗 我知道我也可以将数组传递给函数,在那里它将衰减为指针 int returnInt(int arr[42]) { retur
int (&returnArray(int (&arr)[42]))[42]
{
return arr;
}
当我这样宣布的时候
int (returnArray(int arr[42]))[42]
{
return arr;
}
我明白了
但在第一个示例中,它不是返回了一个数组吗?它是对数组的某种引用吗
我知道我也可以将数组传递给函数,在那里它将衰减为指针
int returnInt(int arr[42])
{
return arr[0];
}
或者通过引用传递
int returnInt(int (&arr)[42])
{
return arr[0];
}
但是为什么我不能以相同的方式返回数组呢
int (&returnArray(int (&arr)[42]))[42]
第一个&
表示这将返回对数组的引用
这是标准要求的:
8.3.5功能§6-
«函数不应具有数组类型或函数类型的返回类型,
尽管它们可能具有类型为指针或引用的返回类型
这样的事情。»
第一个函数不是返回数组,而是返回对数组的引用。数组不能通过C++返回值。
这些主题通常都被很好地涵盖在.< /p> @约翰中,我猜想所有C++的书都应该提到数组值语义。我试图编辑这个问题的副本,以显示它与OndoDo有点不同,这是有意义的,因为将数组作为参数衰减成指针?因此,暗示原始类型始终是“数组”而不是指针,因此不能期望作为指针类型返回?所以这反映了我们为什么会有腐烂的奇怪之处。
int (&returnArray(int (&arr)[42]))[42]