10

C++11 標準リビジョンでは、例外仕様が非推奨になったという記事を読んだところです。以前は、関数がスローする可能性のあるものを指定することは良い習慣だと思っていましたが、どうやらそうではないようです。

Herb Stutter のよく引用された記事を読んだ後、疑問に思わずにはいられません: 一体なぜ、例外仕様がそのままの形で実装されているのでしょうか? 委員会は、コンパイル時にチェックする代わりに、なぜそれらを非推奨にすることにしたのでしょうか? なぜコンパイラは、関数定義に表示されない例外のスローを許可するのでしょうか? int f()私には、これはすべて「関数の戻り値の型を指定するべきではありません。指定すると、そのreturn 3.5;内部でプログラムがクラッシュする可能性があるためです」と言っているように聞こえます。(つまり、強い型付けとの概念的な違いはどこにあるのでしょうか?)

(テンプレートの構文がおそらくチューリング完全であることを考えると、s での例外仕様のサポートの欠如については、typedefこれを実装するのは十分に簡単に思えます。)

4

2 に答える 2

-1

関数が関数f() throw(int)を呼び出した場合、g() throw(int, double)何が起こるでしょうか?

コンパイル時のチェックにより、関数がそれほど厳密でないスロー指定子を使用して他の関数を呼び出すことができなくなりますが、これは非常に面倒です。

于 2013-08-27T17:18:48.903 に答える