![](/img/trans.png)
[英]Why isn't std::string::max_size() == std::string::allocator::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]; }
我不认为让几百实例该功能将是一个问题。 begin
, size
, empty
。你在谈论几乎肯定会内联的代码。
std::array
是指固定大小的数组上的瘦包装器。 对于动态大小的数组,有std::vector
。
std::array
一个好处是它在堆栈上分配内存(除非你声明一个全局对象),开销最小。
如果数组大小由构造函数参数确定,则分配必须在堆上,并且通常结果对象在内存使用和性能方面效率较低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.