簡體   English   中英

容器中的大小大於max_size

[英]size greater than max_size in containers

當容器的大小大於max_size時,關於情況的標准是什么?

UB,std :: bad_alloc還是其他什么?

MSVC拋出異常。

我假設你的意思是'如果我試圖將容器推到max_size會發生什么?' 因為容器的size不能超過max_size 如果是,則max_size返回不正確的值。

究竟發生了什么取決於容器以及嘗試調整容器大小的操作,但在大多數可重復大小的容器(即stringvector )的情況下,標准需要拋出length_error

在大多數情況下,標准要求拋出std::length_error ,但在某些情況下,分配器可能會拋出不同的異常。

從C ++03§21.3/ 4a(類模板basic_string ):

對於任何字符串操作,如果作為操作的結果, size()將超過max_size()則操作將拋出length_error

§21.3.3/ 10-12( basic_string capacity):

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_queuemapmultimapsetmultisetbitset )。 但是,在表65(容器要求)中,它表示max_size是“最大可能容器的size() ”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM