容器中的大小大于max_size

时间:2012-11-09 19:28:09

标签: c++

当容器的大小大于max_size时,关于情况的标准是什么?

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

MSVC抛出异常。

2 个答案:

答案 0 :(得分:1)

我假设你的意思是'如果我试图将容器推到max_size上会发生什么?'因为容器的size不能超过max_size。如果是,则max_size返回的值不正确。

究竟发生了什么取决于容器以及尝试调整容器大小的操作,但对于大多数可重复大小的容器(即stringvector),标准需要{ {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() 248

     

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

标准没有明确提及其他标准容器(dequelistpriority_queuemapmultimap,{{1 },setmultiset)。但是,在表65(容器要求)中,它表示bitset是最大可能容器的“max_size”。