为什么数组只能通过引用返回? 在C++中,返回数组的唯一方法是引用: int ( &unity( int (&arr)[3] ) )[3] { arr[0] = 1; arr[1] = arr[2] = 0; return arr; }
现在使用C++11,我们在STL中有std::array。现在可以通过复制返回std::数组: 为什么我们被迫使用STL,而编译器可以具有同等的功能?为什么在C++11中数组不可能通过复制返回?这并不是说std::array可以通过值传递;这是一个包含复杂行为的类 当您按值传递std::array时,会运行一些代码,为新数组分配正确的空间并复制所有值。它不是语言的一部分,必须有人来实现实际的东西为什么数组只能通过引用返回? 在C++中,返回数组的唯一方法是引用: int ( &unity( int (&arr)[3] ) )[3] { arr[0] = 1; arr[1] = arr[2] = 0; return arr; },c++,arrays,c++11,C++,Arrays,C++11,现在使用C++11,我们在STL中有std::array。现在可以通过复制返回std::数组: 为什么我们被迫使用STL,而编译器可以具有同等的功能?为什么在C++11中数组不可能通过复制返回?这并不是说std::array可以通过值传递;这是一个包含复杂行为的类 当您按值传递std::array时,会运行一些代码,为新数组分配正确的空间并复制所有值。它不是语言的一部分,必须有人来实现实际的东西 另外,std::array和C数组不是一回事,所以不要混淆它们
另外,std::array和C数组不是一回事,所以不要混淆它们由于数组是不可复制的,所以不可能通过复制来返回数组。C++继承了C的第二类公民数组的概念。std::array是编译时固定大小数组的一级公民版本,我建议您尽可能使用它。@juanchopanza数组可以作为结构成员或通过值lambda capture进行复制。我的问题以重复结束,但那里的解释根本不清楚,只在堆栈分配的细节中输入。我更喜欢解释数组不是l值,因此在调用函数中接收它必须使用新的初始化变量,请参阅: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;
}