C++は、例えば、チェック例外の構文を提供します:C++の例外がコンパイラによってチェックされないのはなぜですか?
void G() throw(Exception);
void f() throw();
ただし、Visual C++コンパイラがそれらをチェックしません。スローフラグは単に無視されます。私の意見では、これは例外機能を使用不可能にします。だから私の質問は:は、コンパイラが例外が正しくキャッチ/再スムーズされているかどうかをチェックする方法はありますか?たとえば、Visual C++プラグインまたは別のC++コンパイラ。
PS。コンパイラが例外が正しくキャッチされているかどうかをチェックしたい場合は、がスローされないことを明示的に示しても、のすべての関数呼び出しをキャッチする必要があります。
更新: Visual C++コンパイラは、throw()でマークされた関数をスローするときに警告を表示します。これは素晴らしいことですが、残念ながら、スローする可能性があるサブルーチンを呼び出すと警告が表示されません。たとえば:
void f() throw(int) { throw int(13); }
void h() throw() { g(); } //no warning here!
私はC++のチェック例外について聞いたことがありませんが、今は例外仕様について、Visual C++はあまり気にしません。http://msdn.microsoft.com/ ja-jp/library/wfa0edys.aspx – Skurmedel
Visual C++ではそれを無視していません...関数の最後にthrow()を追加すると、Visual C++はその関数が例えば関数が実際にスローした場合、何かが起こる可能性があります。スタンダードでは、関数がマークされている場合、例外のためにthrow()が終了し、std :: unexpected()は通常std :: bad_exceptionをスローします。これは「何かが起こること」とはまったく異なります。 – Doug
例外仕様がコンパイラに対するヒントであり、何かを行う必要性ではない場合、潜在的に有用なものになります。標準的な行動は、私の意見では、役に立たない。 –