【发布时间】:2017-02-26 03:15:31
【问题描述】:
有时,if 语句可能相当复杂或冗长,因此为了便于阅读,最好在 if 之前提取复杂的调用。
例如这个:
if (SomeComplicatedFunctionCall() || OtherComplicatedFunctionCall())
{
// do stuff
}
进入这个
bool b1 = SomeComplicatedFunctionCall();
bool b2 = OtherComplicatedFunctionCall();
if (b1 || b2)
{
//do stuff
}
(提供的示例并没有那么不好,这只是为了说明......想象一下其他带有多个参数的调用等)
但是通过这次提取,我失去了短路评估 (SCE)。
- 我真的每次都失去 SCE 吗?是否存在允许编译器“优化”并仍提供 SCE 的某些场景?
- 有没有办法在不丢失 SCE 的情况下保持第二个 sn-p 改进的可读性?
【问题讨论】:
-
实践表明,您将在此处或其他地方看到的大多数关于性能的答案在大多数情况下都是错误的(4 错误 1 正确)。我的建议是始终进行分析并自己检查,您将避免“过早优化”并学习新东西。
-
@MarekR 不仅仅关乎性能,还关乎 OtherCunctionCall 中可能出现的副作用 ...
-
@David 在提及其他网站时,指出cross-posting is frowned upon 通常会有所帮助
-
如果可读性是您最关心的问题,请不要在 if 条件内调用具有副作用的函数
-
潜在的接近选民:再次阅读问题。第 (1) 部分不基于意见,而第 (2) 部分可以通过删除对任何假定“最佳实践”的引用的编辑轻松停止基于意见,正如我即将做的那样.
标签: c++ if-statement short-circuiting side-effects