4

std ::strings;ができます。どんな状況でも投げますか?これは規格によって規制されていますか(違いがある場合は、C ++ 03に関心があります)?

4

3 に答える 3

5

C ++ 11では、デフォルトのコンストラクターは実際には1つの(デフォルトの)引数、つまりアロケーター(21.4.2)を取ります。

explicit basic_string(const Allocator& a = Allocator());

このコンストラクターはとして宣言されていませんnoexcept。(アロケータには非スローコピーコンストラクタが必要だと思います。)JonathanとBoが指摘しているように、アロケータのコピーコンストラクタは例外をスローしてはなりませんが、文字列のコンストラクタはスロー操作を実行できます(たとえば、メモリの一部)。スローしないコンストラクターとして文字列のようなクラスを作成することは確かに可能であるはずですconstexprが、標準ライブラリの文字列はそのように指定されていません。

于 2013-01-20T02:52:49.027 に答える
4

これはWG21/N4002によって変更されました。最初のワーキングペーパーには、WG21/N4296が含まれています。 // 21.4.2, construct/copy/destroy: basic_string() noexcept : basic_string(Allocator()) { }

于 2015-04-12T15:32:06.307 に答える
-2

何らかの理由で割り当てが不可能な場合は、スローされます。

于 2013-01-20T03:34:09.537 に答える