【发布时间】:2014-03-21 14:56:44
【问题描述】:
在 C++03 和 C++11 中,数组不能通过函数的值返回(只能通过引用/常量引用)(因为我们不能将一个数组直接分配给另一个数组):
const size_t N = 10;
using Element = int;
using Array = Element[N];
Array array;
// does not compile
// Array GetArray()
// {
// return array;
// }
Array& GetArrayRef()
{
return array;
}
在 C++ 中引入了一种新的引用类型 - 右值引用。它也可以与数组一起使用:
void TakeArray(Array&& value)
{
}
// ...
TakeArray(std::forward<Array>(array));
TakeArray(std::forward<Array>(GetArrayRef()));
这种引用(对数组的右值引用)的目的是什么?可以在任何实际代码中使用还是只是C++11标准的缺陷?
【问题讨论】:
-
您的第一个假设并不完全正确。使用 c++11 可以定义一个 std::array
,它可以按值返回。 -
@MatthiasB
std::array不是数组,它是std容器。 -
@Constructor 我认为
int array[]不是一个数组,而是C 兼容性的遗物。std::array更像是一个真正的数组(很少违反最小惊喜原则) -
这有实际的可能用途(参见@Yakk)。但是,一些没用的东西仍然是合法的,比如类的右值引用成员。这不是缺陷,只是没有人认为有任何理由将其定为非法。
-
@SamCristall 可能你是对的。 :-) 但是它们仍然符合标准,所以...
标签: c++ arrays c++11 rvalue-reference