【发布时间】:2013-03-11 14:30:38
【问题描述】:
这是一个非常琐碎的问题:
有四个布尔函数:a()、b()、c() 和 d()。我想继续按顺序调用它们,直到第一个返回 true。而不是做传统的
if(!a()) {
if(!b()) {
if(!c()) {
d();
}
}
}
或
if(!a() && !b() && !c()) d();
我曾考虑将表达式编写为短路评估。
(a() || b() || c() || d());
但我从未见过在 C/C++ 代码中以这种方式完成此测试。我缺少这种方法有什么问题吗?
谢谢。
【问题讨论】:
-
我可以看到五个布尔函数。
-
@chris or 不会改变意思:d() 只有在所有其他函数都为假时才会执行。
-
从维护的角度来看,我建议不要这样做。当人们看到短路版本时,代码的作用可能不会立即显而易见(如果您担心的话)。您必须询问 SO 的行为这一事实应该暗示其他人阅读您的代码时会发生什么。
-
@Loghorn,哎呀,你是对的。我的错。我刚刚意识到这个问题真正问的是什么。
-
它有效。但是像大多数棘手的代码一样,在没有解释的情况下做这样聪明的事情是不负责任的,最好是在之前的评论中。让它工作并不像确保下一个阅读它的程序员理解它为什么它工作那么重要。
标签: c++ c short-circuiting