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

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

但是为什么我不能像传递数组一样返回数组呢?


@john 我猜所有值得一读的 C++ 书籍都应该提到数组值语义。 - Angew is no longer proud of SO
可能是重复的问题:为什么C++不支持返回数组的函数? - Tony Delroy
我尝试编辑问题以显示它与那个有点不同。 - spiritwolfform
2个回答

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

第一个&表示这将返回对数组的引用
这是标准要求:

8.3.5 函数 §6 -

函数不应该有类型为数组的返回类型或函数,尽管它们可以具有指向此类东西的指针或引用的返回类型。”


传递数组作为参数时会衰变为指针,这是否有意义?因此暗示原始类型始终为“数组”,而不是指针,因此不能期望将其作为指针类型返回。因此,这反映了我们为什么要进行衰变的奇怪之处。 - v.oddou

3

第一个函数不返回一个数组,它返回一个指向数组的引用。在C++中,数组不能按值返回。

这些主题通常在优质的C++书籍中得到很好的涵盖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接