繁体   English   中英

为什么c ++ 11 std :: array使用模板来初始化max_size而不是构造函数?

[英]why does c++11 std::array using template to initialize the max_size not constructor?

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]; } T operator[](int index) { return elems[index]; }我不认为让几百实例功能将是一个问题。 beginsizeempty 。你在谈论几乎肯定会内联的代码。

std::array是指固定大小的数组上的瘦包装器。 对于动态大小的数组,有std::vector

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM