中止带有标志,返回,异常,转到或中断的过程

问题描述 投票:0回答:1

我有一个解析文件的代码,如果满足无效条件,该代码就会分解。该代码是用C ++编写的,就像这样:

bool ok = true;
if (task1() == false)
    ok = false;
if (ok && (task2() == false))
    ok = false;
if (ok && (task3() == false))
    ok = false;
cleanup();
return ok;

现在,我正在寻找更清洁的替代品以获得相同的结果。据我所知有:

  • 使用标志和上面代码中的许多条件
    • 对于相同的信息,有许多冗余测试。对运行时的影响可以忽略不计,并且可能完全由编译器删除,但仍使代码更复杂。
  • 您可以将任务包装在一个方法中并从中返回
    • 这看起来更干净,但是您将代码分散在多个位置职能。根据您的情况,可能会很长参数列表。而且更多的不是最好将收益分散到整个方法中。
  • 您可以使用例外
    • 这将提供一些描述性的代码,但它也是繁重,因为您只想跳过一些电话。更进一步可能并非完全例外。
  • 您可以从break或其他循环中获取do while(0)或switch语句。
    • 嗯,这并不是真正意义上的任务。以外您将获得一个轻巧紧凑的实现和描述性关键字。
  • 使用goto语句
    • 这似乎具有大多数优势。不过,我不确定。人们到处都在说,打破多重循环是此关键字唯一剩余的合理用法。

我没有找到有关此类代码的讨论。通常建议哪些实现?任何C ++编码指南中都提到了这种情况吗?还有其他实用的选择吗?

c++ exception return break goto
1个回答
0
投票

假设所有这些函数都返回一个bool,在我看来,所显示的代码在逻辑上与以下代码相同:

bool ok= task1() && task2() && task3();

cleanup();

return ok;
© www.soinside.com 2019 - 2024. All rights reserved.