假设流提取不会失败,那么
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
是否足够好?
答案 0 :(得分:3)
是的,逻辑完全一样。
我不会调用exit() - 至少在你的代码中,异常可以被其他代码捕获而不是仅仅杀死应用程序。您永远不知道将来某个时候是否会在更大的应用程序中使用此代码,因此最好保持选项开放;)
答案 1 :(得分:1)
您的假设是正确的,两个片段的行为是一样的。
异常是在C ++中处理意外情况的标准方法,因此我不建议使用另一种处理错误的方法,除非在常见情况下预计会发生此错误。如果是这种情况,我会建议您使用某种返回值通知。