【问题标题】:Stream extraction within if/elseif/else 中的流提取
【发布时间】:2011-03-06 20:33:19
【问题描述】:

假设流提取不会失败,会这样

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够不够好?

【问题讨论】:

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


    【解决方案1】:

    是的,逻辑完全一样。

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

    【讨论】:

      【解决方案2】:

      您的假设是正确的,两个 sn-ps 的行为相同。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        • 1970-01-01
        • 2012-10-09
        • 1970-01-01
        相关资源
        最近更新 更多