3

什么标准说明了容器大小大于 max_size 的情况?

UB、std::bad_alloc 还是别的什么?

MSVC 引发异常。

4

2 回答 2

1

我假设您的意思是“如果我尝试将容器推过去会发生什么max_size?” 因为容器size不能超过max_size. 如果是,则max_size返回不正确的值。

究竟会发生什么取决于容器以及尝试调整容器大小的操作,但在大多数可重新调整大小的容器(即 )的情况下stringvector标准要求length_error抛出 a。

于 2012-11-09T21:35:11.060 回答
1

该标准要求std::length_error在大多数情况下抛出 a ,但在某些情况下分配器可能会抛出不同的异常。

从 C++03 §21.3/4a(类模板basic_string):

对于任何字符串操作,如果作为操作的结果,size()将超过max_size(),则操作将抛出length_error

§21.3.3/10-12(basic_string容量):

void reserve(size_type res_arg=0);
[...]
抛出: length_error如果res_arg > max_size(). 218)

218)reserve()使用Allocator::allocate()可能会引发适当的异常。

§23.2.4.2/2-4(vector容量):

void reserve(size_type n)
[...]
抛出: length_error如果n > max_size(). 248

248)reserve()使用Allocator::allocate()可能会引发适当的异常。

deque对于其他标准容器( 、listpriority_queuemapmultimapsetmultisetbitset) ,该标准没有明确提及这一点。但是,在表 65(容器要求)中,它说这max_size是“size()可能的最大容器”。

于 2012-11-09T21:59:48.347 回答