在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中为数组复制没有回复?
答案 0 :(得分:0)
不是std::array
可以通过值传递;它是一个包含复杂行为的类。
当您通过值传递std::array
时,发生的情况是运行一些代码,为新数组分配正确的空间并复制所有值。它不是语言的一部分,有人必须实现实际的东西。
此外,std::array
和C数组不是一回事,所以不要混淆它们!