c++ - 如果满足条件或发生错误

标签 c++ c++11 exception

我有以下案例:

try{
    auto result = do_something(some_input); //do_something() may throw exceptions 
    if (result == bad){
        do_something_else(some_input);
    }
}
catch(...){
     do_something_else(some_input);
}

一些解释:

  1. do_something() 如果过程成功但过程的准确性不是那么好(它是计算机视觉过程),则返回 bad
  2. do_something() 如果由于缺少信息或输入非常错误而无法处理数据,则抛出异常。
  3. 在 1 和 2 中,我希望流程转到另一个方法,即 do_something_else()

我的问题:

  1. 这个设计不好吗?我觉得我使用异常是错误的。
  2. 是否可以通过以下方式合并它们:

理论代码:

auto result = do_something(some_input); //do_something() may throw exceptions 
if (result == bad OR exception was thrown){
    do_something_else(some_input);
}

最佳答案

我推荐这样的东西

bool suceeded = false;

try 
{ 
   auto result = do_something
   if (result != bad)
   {
        succeeded = true;
   }

}
catch (specific_exceptions)
{
   // Log or do something useful here
}

if (!succeeded)
{
  do_something_else
}
else 
{
    use result
}

这试图使您的应用程序的自然流程远离异常情况,并以它们自己独特的方式处理这两个失败,同时仍然将它们汇集到一个持续的案例中。

关于c++ - 如果满足条件或发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40100542/

相关文章:

c++ - std::is_const 将 const 指针标识为非常量

c++ - 减少 C++ 中的 std::regex 编译时间

java - TestNG 类需要 Exception.class

C++程序结束得太早

c++ - 创建面向对象的链表时出现编译问题(编译器错误 C2664)

C++ 11 GCC 4快速优化不在堆栈中存储抽象类的实现类

vb.net - 同时捕获多个异常

java - 在本地主机上抛出套接字异常,但不在网络上抛出?

c++ - std::vector::erase() 删除错误的元素

c++ - 禁止通过引用捕获