"单一任务"与"没有早期回归"

Sim*_*ter 2 c++ coding-style const return

我有一个相当难以理解的算法,所以我把它写成const变量的单个赋值形式,在解释我为什么这样做之间有很多评论.每当算法拒绝解决方案时,return语句就会导致.

另一方面,客户要求该方法没有"早期"返回语句,这是一个有点冲突的目标,因为const在这种情况下我可以使用我的变量的唯一方法是许多嵌套if块.

是否有一个优雅的解决方案,可以让我充分利用这两个世界 - 如果变量在范围内并且仍然是一个有点平坦的层次结构,那么这些变量是有效的吗?

编辑:客户也对例外情况表示不满goto.这是一条热门途径,实现了一个决策树,该决策树确定来自解决方案生成器的建议解决方案是否可接受且比先前的解决方案更好.

嵌套ifs的范围看起来像

if(fulfills_condition_1(sol)) {
    double const some_quality = quality_function_1(sol);
    double const normalized_quality = normalize_quality_1(some_quality);
    if(fulfills_condition_2(normalized_quality) {
    {
        double const another_quality = ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我目前的方法看起来像

if(!fulfills_condition_1(sol))
    return;
double const some_quality = quality_function_1(sol);
double const normalized_quality = normalize_quality_1(some_quality);
if(!fulfills_condition_2(normalized_quality) {
    return;

...

update_current_solution(sol);
Run Code Online (Sandbox Code Playgroud)

Max*_*kin 5

另一方面,客户要求该方法没有"早期"返回语句

如果使用析构函数进行清理,这个要求不会使代码在C++世界中变得更好,因为它们通常应该在C++中使用.

只有C代码才能避免在具有多个返回的函数中清除重复.这正是Linux内核使用的风格.