2009-05-08 4 views
1
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; 
    } 
    } 

答えて

6

何かを返すか、例外を再スローする(または新しいものをスローする)必要があります。キャッチブロックにキーワード

throw 

を後で例外なく使用するだけで、同じ例外を再開できます。

1

戻り値が返されない場合、戻り値は未定義で、おそらく有効な戻りコードの1つを取得するため、後で呼び出し先が間違った処理を行う可能性があります。コンパイラはまた、(f.e.は "コントロールが非void型関数の終わりに到達した")は、このための警告を与える

2 
2293512 

printf("%i\n", somefunction(false)); 
printf("%i\n", somefunction(true)); 

が出力:これを試してみてください。

0

例外を再現しない限り、int(恐らくエラーのセンチネル値)を返す必要があります。

0

コンパイラ/コンパイラの設定によっては、戻り値なしで残すことのできるintを返す関数をコンパイルすることはできません。つまり、「実行は非void関数の終了に達します。したがって、例外を元に戻したい場合を除き、値を返す必要があります。

1

この関数はintを返すので、intを返す必要があります。代わりに、関数内の例外をキャッチして伝播させないようにすることができます。

1

まず、9行目に6行目を投げた例外をキャッチして、あなたは例外を誤って使用しています。あなたは基本的に、 "if"ステートメントで通常のプログラムフローでできることをやっています。この方法でコードベースにスローされた例外を追加することで、例外が本当に例外的な状況に使用されることはもはや真実ではなくなります。単純な選択肢がある場合は、関数から例外をスローしないことをお勧めします。あなたはそれが誤用であると考えられる場合は、理由を説明してください

  • が例外に
+0

を投げint

  • を返す:あなたは2つの方法でint機能を終了することができ、言っ

    。 –

  • +0

    @Neilあなたは正しいです。私は今それを説明しました。 –

    +0

    if(a)操作でも例外がスローされるとしますか?それで彼のコードは理にかなっています。しかし、私は実際のコードではなく、彼の質問をサポートするための簡単な例を投稿していると思っています。 –

    関連する問題