为什么数组只能通过引用返回?

时间:2014-12-10 11:25:20

标签: c++ arrays c++11

在C ++中,返回数组的唯一方法是引用:

int ( &unity( int (&arr)[3] ) )[3] {
  arr[0] = 1; arr[1] = arr[2] = 0;
  return arr;
}

现在使用C ++ 11,我们在STL中有std::array。现在可以通过副本返回std::array

#include <array>
std::array< int, 3 > make_unity() {
  std::array< int, 3 > arr;
  arr[0] = 1; arr[1] = arr[2] = 0;
  return arr;
}

为什么在编译器具有相同的功能时我们被迫使用STL?为什么在C ++ 11中为数组复制没有回复?

1 个答案:

答案 0 :(得分:0)

不是std::array可以通过值传递;它是一个包含复杂行为的类。

当您通过值传递std::array时,发生的情况是运行一些代码,为新数组分配正确的空间并复制所有值。它不是语言的一部分,有人必须实现实际的东西。

此外,std::array和C数组不是一回事,所以不要混淆它们!