0

ストリーム抽出が失敗しないと仮定すると、これは

if( !(stream >> token) )
    throw runtime_error( "Unexpected end of recipe." );
else if( token == "something" )
    // do something
else
    throw runtime_error( "Unknown token" );

このように働きます

if( !(stream >> token) )
    throw std::runtime_error( "Unexpected end of recipe." );

if( token == "something" )
    // do something
else
    throw std::runtime_error( "Unknown token" );

(ストリーム = std::stringstream およびトークン = std::string) そして、予想される結果にtokenは、ストリームからの次の...トークンが含まれていますか? エラーを処理するより良い方法はありますか? cerr << "error whatever" << endl; exit();または何か、または私は十分std::runtime_errorですか?

4

2 に答える 2

3

はい、ロジックはまったく同じです。

そして、exit() を呼び出すことはありません。少なくともコードでは、アプリを強制終了するのではなく、他のコードで例外をキャッチできます。将来、このコードをより大きなアプリケーション内で使用するかどうかはわからないので、オプションを開いたままにしておくことをお勧めします;)

于 2010-06-22T14:19:29.620 に答える
1

あなたの仮定は正しいです、2つのスニペットは同じように機能します。

例外はC++で予期しない状態を処理する標準的な方法であるため、このエラーが一般的なケースで発生すると予想される場合を除いて、エラーを処理する別の方法を使用することはお勧めしません。その場合は、代わりに関数に何らかの戻り値の通知を行うことをお勧めします。

于 2010-06-22T14:32:30.290 に答える