当容器的大小大于max_size时,关于情况的标准是什么?
UB,std :: bad_alloc还是别的什么?
MSVC抛出异常。
答案 0 :(得分:1)
我假设你的意思是'如果我试图将容器推到max_size
上会发生什么?'因为容器的size
不能超过max_size
。如果是,则max_size
返回的值不正确。
究竟发生了什么取决于容器以及尝试调整容器大小的操作,但对于大多数可重复大小的容器(即string
,vector
),标准需要{ {1}}被抛出。
答案 1 :(得分:1)
在大多数情况下,标准要求抛出std::length_error
,但在某些情况下,分配器可能会抛出不同的异常。
从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()
。 248248)
reserve()
使用Allocator::allocate()
可能会引发相应的异常。
标准没有明确提及其他标准容器(deque
,list
,priority_queue
,map
,multimap
,{{1 },set
和multiset
)。但是,在表65(容器要求)中,它表示bitset
是最大可能容器的“max_size
”。