3

コンテナーのサイズが max_size より大きい場合の状況について、どの標準が述べていますか?

UB、std::bad_alloc などですか?

MSVC は例外をスローします。

4

2 に答える 2

1

「コンテナを押し込もうとするとどうなるのmax_size?」という意味だと思います。コンテナsizeはを超えることができないためmax_sizeです。含まれている場合はmax_size、誤った値を返しました。

正確に何が起こるかは、コンテナと、コンテナのサイズを変更しようとしている操作によって異なりますが、ほとんどのサイズ変更可能なコンテナ(つまりstringvector)の場合、標準ではalength_errorをスローする必要があります。

于 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 if res_arg > max_size(). 218)

218)適切な例外をスローする可能性のあるreserve()使用。Allocator::allocate()

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

void reserve(size_type n)
[...]
スロー: length_error if n > max_size(). 248

248)適切な例外をスローする可能性のあるreserve()使用。Allocator::allocate()

標準では、他の標準コンテナー ( dequelistpriority_queuemapmultimapsetmultisetおよびbitset) については明示的に言及していません。ただし、表 65 (コンテナーの要件) ではmax_size、「size()可能な限り最大のコンテナー」と記載されています。

于 2012-11-09T21:59:48.347 に答える