1. ホーム
  2. c++

[解決済み】関数のシグネチャでthrowキーワードを使用する場合

2022-04-08 15:29:10

質問

C++を使用することがバッドプラクティスであると考えられている技術的な理由は何ですか? throw キーワードを関数シグネチャに使用することはできますか?

bool some_func() throw(myExc)
{
  ...
  if (problem_occurred) 
  {
    throw myExc("problem occurred");
  }
  ...
}

解決方法は?

いいえ、それは良い習慣とはみなされていません。それどころか、一般的には悪いことだと考えられています。

http://www.gotw.ca/publications/mill22.htm にはその理由が詳しく書かれていますが、問題は、コンパイラがこれを強制できないので、実行時にチェックしなければならないことです。また、どのような場合でもサポートが十分ではありません。(MSVCは例外の指定を無視します。throw()を除いて、例外が投げられないことを保証していると解釈しています。