if / else中的流提取

时间:2010-06-22 14:13:33

标签: c++ error-handling iostream runtime-error

假设流提取不会失败,那么

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" );

(stream = std :: stringstream and token = std :: string) 预期的结果是token包含来自流的下一个...令牌? 有没有更好的方法来处理错误?像cerr << "error whatever" << endl; exit();或其他什么,或者我的std::runtime_error是否足够好?

2 个答案:

答案 0 :(得分:3)

是的,逻辑完全一样。

我不会调用exit() - 至少在你的代码中,异常可以被其他代码捕获而不是仅仅杀死应用程序。您永远不知道将来某个时候是否会在更大的应用程序中使用此代码,因此最好保持选项开放;)

答案 1 :(得分:1)

您的假设是正确的,两个片段的行为是一样的。

异常是在C ++中处理意外情况的标准方法,因此我不建议使用另一种处理错误的方法,除非在常见情况下预计会发生此错误。如果是这种情况,我会建议您使用某种返回值通知。