10

次の文でモジュールという用語は何を指しますか?

例外がモジュールの境界を越えて伝播することを許可しないでください。

これは、ハーブサッターとアンドレイアレキサンドレスクによるC++コーディング標準のルール62です。


私は今本を読んだので、セクションの要約を引用したいと思います。

隣人の庭に石を投げ込まないでください。C++例外処理のためのユビキタスなバイナリ標準はありません。両側のビルドに使用されるコンパイラーとコンパイラー・オプションを制御しない限り、2つのコード間で例外が伝播することを許可しないでください。そうしないと、モジュールが例外伝播の互換性のある実装をサポートしない可能性があります。通常、これは次のように要約されます。モジュール/サブシステムの境界を越えて例外を伝播させないでください。

4

2 に答える 2

5

それは良い質問です。C ++標準では、モジュールという単語は使用されていません(少なくとも、私は思いません)。通常の日常的な意味は、翻訳単位のようなものです。例外を使用する本当の目的はコードのローカル本体から伝播することであるため、それがHerbとAndreiの意味ではないことを除いて、そうでない場合はリターンコードを使用します。

推測することしかできませんが、おそらく別のDLLに合理的に実装される可能性のあるものを意味します。DLLが別のコンパイラでコンパイルされている場合、または別の言語を使用している場合は、DLLの境界を越えて例外を伝播することが問題になる可能性があります。さもないと...

通常、メイン(または各スレッドの他の高レベル関数)に単一のtry / catchブロックを配置し、それらがどこから来たかに関係なく、そこですべての例外をキャッチすることがベストプラクティスと見なされます。そして、これを行うとき、最新のコンパイラに問題はありません。

于 2013-02-05T19:05:19.510 に答える
0

私はその本を読んでいませんが、ミシガン大学からのこのpdfで詳述されているモジュールの概念である可能性が高いようです。

つまり。モジュールは、通常、ヘッダーファイルとソースファイルで構成される単一のコンパイル単位です。

これは、編集の制御が強調されているため、本からの引用の文脈では理にかなっています。単一のコンパイル単位(モジュール)に自己完結型の機能がある場合は、特定のコンパイラ機能に依存しているためにコンパイルされた機能が不完全になることを心配する必要はありません。

于 2015-07-07T19:20:46.923 に答える