質問

あり、私の場合の近似式は以下のようにな C++の標準 るか(または下書きがいを見定めながら総合的な例外の保証によるSTL。すべてのIでは時折部不完全な記述がなさ 一部の の機能 一部の の種類です。やかりしていると思うかを見定めながら、わかりません。

注意:ない うに保証人を考えることができる、基本的に この質問.
を探している 正当な権限を持つソー これらの情報自体は好ましくは、無料版ソース(例えば案の立場に立ってより以下のとして扱う。

役に立ちましたか?

解決

標準を読むことは怖い(標準に戻りましょう)は、Bjarne Stroustrupは彼の本の「C ++プログラミング言語」で本当に素晴らしい付録を書いています。彼はこの付録AT

を投稿しました

http://www.stroustrup.com/3rd_safe0.html 、AT http://www.stroustrup.com/3rd_safe.pdf

それはかなり長くて詳細な(そしてよく書かれています)。たとえば、Section E.4の面白い、見積もりを見つけることができます:

E.4標準コンテナ保証

ライブラリ操作自体が例外をスローする場合は、 - そしてかくることができます - それが操作したオブジェクトがあることを確認してください。 明確な状態たとえば、at()投入OF_OF_RANGE ベクトル(§16.3.3)はベクトルの例外安全に問題ではありません 。 at()の作家はベクトルがあることを確認している問題はありません 投げる前の明確な状態

また、セクションE.4.1状態

基本保証に加えて、標準図書館は 要素を挿入または削除するいくつかの操作の強力な保証。

Page 956を見てください。ベクトル、デック、リスト、マップのためのさまざまな操作の保証表が含まれています。 まとめ、これらのコンテナ上のすべての操作は、基本的な保証を提供するマップへの n - 要素挿入を除いて、ノートウェイまたは強いです。

注:上記のテキストは古く、C ++ 11には対応していませんが、ほとんどの目的や目的で十分に正しいはずです。

C ++ 11になると...

標準的な最初の状態、コンテナについて array, deque, forward_list, list, vector, map, set, unordered_map, unordered_set, queue,stack

23.2.1 / 10

特に指定のない限り(23.2.4.1,23.2.5.1,23.3.3.4を参照)。 23.3.6.5)この句で定義されているすべてのコンテナタイプは、次の追加要件を満たしています。

- insert()またはemplace()関数によって例外がスローされている場合 単一の要素を挿入すると、その関数は効果がありません。
- push_back()またはpush_front()関数によって例外がスローされている場合、 その関数は効果がありません。
- 消去()、clear()、pop_back()またはpop_front()関数をスローする 例外。
- 返されたイテレータのコピーコンストラクタまたは割り当て演算子なし 例外をスローします。
- swap()関数は例外をスローしません。
- no swap()関数は参照、ポインタ、または 交換されているコンテナの要素を参照するイテレータ。

上記の各セクションで指摘されているQuirksは、(各例外安全保証と呼ばれる各スパージャー保証)は、含まれているタイプのハッシュ、比較操作、およびスワップスワップのスロースワップからの例外を扱う場合のような壁のケースにほとんど特別なケースです。そして移動操作を投げます。

他のヒント

n3376

23.2.1一般輸送容器について[コンテナ.ます。一般]

第10

下記参照23.2.4.1,23.2.5.1,23.3.3.4、23.3.6.5)すべてのコンテナの種類に定める条項には、以下の追加要件:
—例外がスローされるinsert()またはemplace()関数を挿入し、単一元素が機能しています。
—例外がスローされるpush_back()またはpush_front()関数によって機能がない。
—no消去()、(),pop_back()またはpop_front()関数の例外がスローされます。
なコピーコンストラクタまたは代入演算子の返された反復子の例外がスローされます。
なスワップ()関数の例外がスローされます。
なスワップ機能を無効に他の参照ポインタ、または反復子は、つの要素をコンテナを入れ替え.
【ご注意:End()反復子は任意の要素でが無効になるかもしれないという—endnote]

23.2.4容器を連想[連想.reqmts]

23.2.4.1例外安全保障[連想.reqmts.を除く]

1連想の器、clear()機能の例外がスローされます。消去(k)は例外をスローしない限り、例外がスローされるコンテナのオブジェクトを比較します。
2連想のコンテナ、例外がスローされる操作の中から挿入emplace機能を挿入し、単一元素を挿入しても、何の効果もありません。
3連想の容器は、スワップ機能が例外をスローしない限り、例外がスローされますのスワップのコンテナのオブジェクトを比較します。

23.2.5順序付けら連想器[unord.req]

23.2.5.1例外安全保障[unord.req.を除く]

1順序付けのための連想器、clear()機能の例外がスローされます。消去(k)は例外をスローしない限り、例外がスローされるコンテナのハッシュまたはPredオブジェクトを含みます。
2つの順序付けのための連想コンテナ、例外がスローされる操作以外のコンテナのハッシュ関数内から挿入emplace機能を挿入し、単一元素を挿入しても、何の効果もありません。
3.順序付けら連想の容器は、スワップ機能が例外をスローしない限り、例外がスローされますのスワップのコンテナのハッシュまたはPredオブジェクトを含みます。
4順序付けのための連想コンテナ、例外がスローされ内部からの焼き直()関数以外のコンテナのハッシュ関数は比較機能は、焼き直()関しても、何の効果もありません。

23.3.3.4deque修飾子[deque.修飾子]

void push_back(T&&x);条第2項

備考:例外がスローされ以外のコピーコンストラクタ、コンストラクタ、オペレーターが起動すると、代入演算子のTありません。例外がスローされる動きのコンストラクタ非CopyInsertable T,その効果は未指定です。

反復子消去(const_iterator、const_iterator昨);第6項

戻り値:何もない限り、例外がスローされ、コピーコンストラクタ、コンストラクタ、オペレーターが起動すると、代入演算子の

23.3.6.5ベクターの修飾子[ベクトルとなっています。修飾子]

void push_back(T&&x);条第2項

例外がスローされる動きのコンストラクタ非CopyInsertable T,その効果は未指定です。

反復子消去(const_iterator、const_iterator昨);条第5項の規定により

戻り値:何もない限り、例外がスローされ、コピーコンストラクタ、コンストラクタ、オペレーターが起動すると、代入演算子の

あなたがリンクした文書は、N3337ドラフト規格である、公式として扱うことができます。それはC ++ 11標準プラスマイナー編集の変更です。

あなたは単に標準を読むことを学ぶ必要があります。これは簡単な読み方であることを意図していないので理解できます。

特定のライブラリ操作の例外保証を見つけるには、備考と例外についてのコメントについての操作の仕様を確認してください。関数がメンバー関数である場合は、例外の安全性とそれが満たす要件についてのコメントのタイプの指定を確認してください。次に、それらの要件を満たすためにオブジェクトによって作成されなければならない例外保証のための満了要件を確認してください。

一般的なタイプとアルゴリズムには、タイプまたはアルゴリズムまたはメンバー関数が保持するすべての例外保証が行われたすべての例外保証が保持されている場合(テンプレートの場合は、テンプレートの場合)という条件を確認するために、テンプレートパラメータに配置されている要件も確認してください。パラメータは指定された要件を満たしていません。これらのパラメータを使用してテンプレートを使用すると、未定義の動作があり、テンプレートの仕様が適用されていません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top