我有一个很难理解的算法,所以我以对 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/