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

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

4

2 回答 2

3

是的,逻辑完全一样。

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

于 2010-06-22T14:19:29.620 回答
1

您的假设是正确的,这两个片段的作用相同。

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

于 2010-06-22T14:32:30.290 回答