例外後にオブジェクトが返されましたか?
-
22-07-2019 - |
質問
int somefunction(bool a)
{
try
{
if(a)
throw Error("msg");
return 2;
}
catch (Error const & error)
{
//do i need to return anything here??
//return -1;
}
}
解決
何かを返すか、例外を再スローする(または新しい例外をスローする)必要があります。キーワードを使用するだけで同じ例外を再スローできます
throw
catchブロック内で、例外や引数なしで後で。
他のヒント
そこに何も返さない場合、戻り値は定義されておらず、おそらく有効な戻りコードの1つを取得するため、呼び出し先はおそらく間違った動作をするでしょう。これを試してください:
printf("%i\n", somefunction(false));
printf("%i\n", somefunction(true));
出力:
2
2293512
コンパイラーはこれについても警告を出します(例えば、「制御が非void関数の終わりに到達しました」)。
この関数はintを返すため、intを返す必要があります。別の方法は、関数で例外をキャッチして伝播させないことです。
最初に、6行目でスローする例外を9行目でキャッチすることにより、例外を誤用しています。基本的には、通常のプログラムフローでできることを「if」で実行しています。ステートメント。このようにスローされた例外をコードベースに追加することにより、例外が本当に例外的な状況に使用されることはなくなります。簡単な代替手段がある場合は、関数から例外をスローしないことをお勧めします。
とはいえ、 int
関数を終了するには2つの方法があります:
-
int
を返す
- 例外をスローする
例外を再スローしない限り、int(おそらくエラーのセンチネル値)を返す必要があります。
コンパイラ/コンパイラの設定によっては、戻り値なしで残すことができるintを返す関数をコンパイルすることはできません。そのため、例外を再スローする場合を除き、値を返す必要があります。
所属していません StackOverflow