【问题标题】:In which condition we should prefer returning error values to throwing exceptions [duplicate]在哪种情况下,我们应该更喜欢返回错误值而不是抛出异常[重复]
【发布时间】:2013-06-07 08:33:11
【问题描述】:

我有一个与 c++ 异常有关的问题。我知道在许多情况下抛出异常比返回错误值更好。但是,我确实发现以下情况,返回错误值比异常更可行:

 bool run_a_function()
 {  

    if (!function_step1())
        return false;
    if (!function_step2())
        return false;
    if (!function_step3())
        return false;
    if (!function_step4())
        return false;

}

从上面的代码我们可以看出,为了完成一个功能,需要几个步骤。如果一个步骤失败,则返回一个错误值。那么当操作者使用run_a_function函数时,他可以确保即使这个函数运行不好,程序也不会崩溃:

 if (run_a_function())
    do_something();
 else
    do_other_things();

但是,如果我们使用异常:

void run_a_function()
 {  

    try
   {
      function_step1();
      function_step2();
      function_step3();
      function_step4();
    }
    catch (...)
    {
     }
  }

那么我就有程序崩溃和抛出异常的风险。我的问题是:在这种情况下,我是否有理由返回错误值?是否有一些用于选择错误值和异常的行会?谢谢!

【问题讨论】:

  • “我知道在很多情况下抛出异常比返回错误值更好。”你的来源是什么?我完全不同意。
  • @DanielDaranas “在几乎所有情况下,我更喜欢异常而不是错误代码。” stackoverflow.com/questions/253314/exceptions-or-error-codes
  • 但是,如果您阅读了全部答案,则错误代码显然占有一席之地,特别是:“例外是任何停止或禁止方法或子例程执行您要求它执行的操作的情况。. . 不传递有关异常情况或异常情况或系统状态等的消息。为此使用返回值或 ref(或 out)参数。 (见答案stackoverflow.com/a/254073/96780)。我不同意一种比错误代码更好的异常通用方法。

标签: c++ visual-studio-2010


【解决方案1】:

看看这个http://www.parashift.com/c++-faq/exceptions.html 一般来说,当异常被证明是问题时,我只在性能关键部分使用返回值。此外,你永远不应该跨越你的模块边界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多