2

c++11 使用模板来定义数组的 max_size(例如。std::array<int, 5> a1;)但不是构造函数。(例如。std::array<int>(5) a1;

由于模板将为类生成代码,如果我有很多数组,只是大小不同,就会生成很多代码。

(1.可能会导致编译时间增加。2.可能会导致可执行文件代码部分的扩展。)

4

3 回答 3

13

因为如果没有,它就不可能是现在的样子。

std::array是一个数组。不是动态大小的数组。不是运行时大小的数组。它是一个数组,很像int arr[5].

C++ 是一种静态类型语言,这意味着 C++ 类型必须具有编译时定义的大小。arr在上面的例子中有一个大小;如果你这样做sizeof(arr),你会得到sizeof(int) * 5sizeof(std::array<int, 5>)也有一个大小,由其中的元素数量定义。因此,大小必须是编译时定义的数量,因为它会影响编译时定义的大小。

std::array和常规数组的区别是:

  • 数组将隐式衰减为指针。std::array才不是; 你需要显式调用一个函数来做到这一点。
  • 数组是语言数组;std::array,对于语言来说,是一个包含数组的结构。

如果我有很多数组,只是大小不同,就会生成很多代码。

是的,你可能会。话又说回来……这是一个严重的问题吗?你真的看过一个std::array实现吗?

那里没有太多东西。T operator[](int index) { return elems[index]; }我不认为获得函数的几百个实例化将是一个问题。begin, size,等也是如此empty。您所谈论的代码几乎肯定会被内联。

于 2012-11-30T08:11:04.607 回答
7

std::array意味着作为固定大小数组的薄包装器。对于动态大小的数组,有std::vector.

于 2012-11-30T08:09:35.807 回答
1

一个好处std::array是它以最小的开销在堆栈上分配内存(除非您声明一个全局对象)。

如果数组大小由构造函数参数确定,则分配必须在堆上,并且通常生成的对象在内存使用和性能方面效率较低。

于 2012-11-30T08:14:46.683 回答