c++11 使用模板来定义数组的 max_size(例如。std::array<int, 5> a1;
)但不是构造函数。(例如。std::array<int>(5) a1;
)
由于模板将为类生成代码,如果我有很多数组,只是大小不同,就会生成很多代码。
(1.可能会导致编译时间增加。2.可能会导致可执行文件代码部分的扩展。)
因为如果没有,它就不可能是现在的样子。
std::array
是一个数组。不是动态大小的数组。不是运行时大小的数组。它是一个数组,很像int arr[5]
.
C++ 是一种静态类型语言,这意味着 C++ 类型必须具有编译时定义的大小。arr
在上面的例子中有一个大小;如果你这样做sizeof(arr)
,你会得到sizeof(int) * 5
。sizeof(std::array<int, 5>)
也有一个大小,由其中的元素数量定义。因此,大小必须是编译时定义的数量,因为它会影响编译时定义的大小。
std::array
和常规数组的区别是:
std::array
才不是; 你需要显式调用一个函数来做到这一点。std::array
,对于语言来说,是一个包含数组的结构。如果我有很多数组,只是大小不同,就会生成很多代码。
是的,你可能会。话又说回来……这是一个严重的问题吗?你真的看过一个std::array
实现吗?
那里没有太多东西。T operator[](int index) { return elems[index]; }
我不认为获得该函数的几百个实例化将是一个问题。begin
, size
,等也是如此empty
。您所谈论的代码几乎肯定会被内联。
std::array
意味着作为固定大小数组的薄包装器。对于动态大小的数组,有std::vector
.
一个好处std::array
是它以最小的开销在堆栈上分配内存(除非您声明一个全局对象)。
如果数组大小由构造函数参数确定,则分配必须在堆上,并且通常生成的对象在内存使用和性能方面效率较低。