有两个限制,不是由C ++强制执行,而是由硬件强制执行。
通过用于描述数组中的索引的大小类型(及其大小)的限制来设置第一个限制(永远不会达到)。它由系统std::size_t可以采用的最大值给出。此数据类型应始终是系统的最大整数类型。
另一个限制是物理内存限制。数组中的对象越大,因为内存已满,越早达到此限制。例如,vector
给定大小为n的a通常占用的内存约为类型数组的四倍vector
(减去较小的常数)。因此,a vector
可能比vector
内存已满之前包含的项目更多。本地C样式数组int[]和的计数相同char[]。
此外,此上限可能会受allocator用于构造的类型的影响,vector因为an allocator可以随意使用其想要的任何方式来管理内存。一个非常奇怪但仍然可以想到的分配器可以以相同对象实例共享资源的方式来缓冲内存。这样,您可以将许多相同的对象插入容器,否则将耗尽所有可用内存。
除此之外,C ++没有任何限制。
问题来源于stack overflow