c++ - "single assignment"与 "no early return"

标签 c++ coding-style return constants

我有一个很难理解的算法,所以我以对 const 变量的单一赋值的形式写下来,中间有很多注释来解释我为什么这样做.每当算法拒绝解决方案时,return 语句就会引出。

另一方面,客户要求该方法没有“早期”返回语句,这是一个有点矛盾的目标,因为我可以在这种情况下使用我的 const 变量有很多嵌套的 if block 。

是否有一个优雅的解决方案可以让我获得两全其美的好处——如果变量在范围内并且仍然是一个有点扁平的层次结构,则它们是有效的?

编辑:客户也不赞成异常和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 = ...
    }
}

我目前的做法是这样的

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);

最佳答案

The customer, on the other hand, requested that the method have no "early" return statements

此要求不会使 C++ 世界中的代码变得更好,前提是使用析构函数进行清理,就像 C++ 中通常应该使用的那样。

它只对 C 代码有用,可以避免在具有多个返回的函数中清除重复。这正是用于 Linux 内核的风格。

关于c++ - "single assignment"与 "no early return",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13457949/

相关文章:

c++ - block 范围内的 thread_local

c++ - 如何使用dll

c++ - 当窗口设置为事件时获取通知

f# - 我应该使用 new Type() 还是只使用 Type() 来调用构造函数

java - 方法在执行完成之前返回?

c++ - 为什么我会收到函数式初始化程序错误似乎是函数定义

java - 自动检查 Java 文件是否符合编码标准

java - 为什么还可以使用空白构造函数?

javascript - 直接在 this.setState 中返回对象文字与原始值之间的区别? ( react .JS)

c - 返回结构并保存在不同 .c 文件中的结构变量中