4

クラスとグローバル関数があることを検討してください。

これは、例えば、usefulfuncts.hpp

void dosome(int a, int b) throw (std::exception);

これはusefulfuncts.cpp

void dosome(int a, int b) throw (std::exception) {
   //...
}

そしてこれはaclass.hppです

class aclass {
   // Members...
   friend void dosome(int a, int b) throw (std::exception);
   // Members...
};

後(私はそれが何になりたいか)

Ok!throw条項を毎回書くことが厳密に必要かどうかを理解したいと思います。だから例えば私はこれを行うことができますか?

これはusefulfuncts.hpp

void dosome(int a, int b) throw (std::exception);

これはusefulfuncts.cpp

void dosome(int a, int b) { /* OMITTING IT! */
   //...
}

そしてこれはaclass.hppです

class aclass {
   // Members...
   friend void dosome(int a, int b); /* OMITTING IT */
   // Members...
};

これは正しいですか?メイン宣言だけに入れるには?ありがとう

4

3 に答える 3

12

例外指定を省略すると、関数は任意の例外をスローできます。

例外指定が悪い。この機能を正しく実装しているコンパイラはほとんどありません。C++11 標準以降、非推奨になりました。実際、例外仕様は、C++03 標準の一部であったにもかかわらず、失敗した実験と見なされていました。

よく読ん
でください: 例外仕様の実用的な見方

于 2012-06-29T08:50:06.830 に答える
3

例外を宣言するのは悪い考えです。http://www.gotw.ca/publications/mill22.htmから:

道徳#1:例外仕様を書かないでください。
道徳#2:おそらく空のものを除いて、しかし私があなたならそれさえ避けたいでしょう。

于 2012-06-29T08:53:42.990 に答える
1

例外仕様はC++11で非推奨になりました。関数が例外をスローしないことが保証されていることを指定しない限り、例外仕様を記述しないでください。

この保証を実際に提供することは、見た目よりも難しいことに注意してください。ハーブサッターは、例外と例外の安全性をテーマにした多くの記事本を書いています。

于 2012-06-29T08:53:57.530 に答える