C++の例外仕様とは
void func(void) throw(A);
のように、関数の投げる例外を明記する記法のこと。
「C++ FAQ」には『理由が無い場合は例外仕様を書く』と書かれていたので、あちこちに使っていたのだが、「Exceptional C++ Style」でその欠点を知って全部消した。
欠点の詳細は「Exceptional C++ Style」「C++ Coding Standards」などのHerb Sutter氏によるC++のスタイルガイド本に載っているが、最大の理由はパフォーマンスが低下すること。実際、Borland C++ Compiler 5は例外仕様(例外リスト)をもつクラスをインライン展開してくれない。
教訓#1:例外仕様を決して書いてはならない。 教訓#2:空の例外仕様は除くが、私があなたなら、それさえも避けるだろう。 「Exceptional C++ style」p96より