2007-01-26 [長年日記]

[C++] Questions About Exception Specifications

C++ Coding Standardsでも取り扱われていますが、C++で例外指定を使うべきでない理由。

かなり適当にはしょって言うと、

  • Javaなどと違ってコンパイル時に静的にチェックされるわけではなく、動的にチェックされて指定されていない例外を投げるとunexpected()が呼ばれてプロセスが終了する(大抵の人はそんなことは望んでいない)
  • 静的なチェックはテンプレートと相性が悪い
  • 動的にチェックするためのコード(tryとcatchでくるんで予期せぬ例外が投げられたらunexpected()を呼び出すコード)が入るのでパフォーマンスに悪影響を与える

という感じ。どんな例外を投げるかは、例外指定ではなくてドキュメントに書けということですね。

基本的には関数を例外安全にした上で、処理できる例外は処理し、それ以外は呼び出し元にそのまま投げるのが良いのでしょうが、実際には例外安全にできなかったり、できるけどやたら(実装時や実行時の)コストがかかる場合も多くて難しいところですね。

[]

トップ «前の日記(2006-12-31) 最新 次の日記(2007-02-01)»