考虑这些选项
if(successful)
{
if(condition)
{
//do something
}
if(condition)
{
//do something
}
...
}
或
if(successful)&&(condition)
{
//do something
}
if(successful)&&(condition)
{
//do something
}
...
想象一下有100条if语句。
效率有什么不同吗?
提前致谢。
答案 0 :(得分:10)
这有两个正确的答案。其他一切都是无稽之谈。
首先让您的代码正确无误。然后测量它的性能。然后根据需要优化 。其他一切都是无稽之谈。
答案 1 :(得分:8)
这一切都取决于评估successful
表达式的成本。
您还应注意,这两个版本在语义上不相同,因为if-expression的评估可能有副作用 1 。
如果您实际遇到性能问题,那么测量,不要猜测。测量将是了解性能真实情况的唯一方法。
1 要从评论中解释一个问题,这里有一个简单的例子,你会得到不同的行为:
方法CreateProcess
具有启动新流程的副作用,并通过返回true
来指示成功创建:
bool CreateProcess(string filename, out handle) { ... }
if (CreateProcess("program.exe", out handle))
{
if (someCondition)
{
handle.SomeMethod(...);
}
if (someOtherCondition)
{
handle.SomeOtherMethod(...);
}
}
这与以下内容截然不同:
if (CreateProcess("program.exe", out handle) && someCondition)
{
handle.SomeMethod(...);
}
if (CreateProcess("program.exe", out handle) && someOtherCondition)
{
handle.SomeOtherMethod(...);
}
答案 2 :(得分:1)
两者都是O(1)。其他任何东西取决于你使用的语言/编译器/优化器。
答案 3 :(得分:0)
首先我要说明我完全同意JMcO
然而,我发现考虑这些差异会很有趣。 (可能是因为我在编译器上工作,其中关于优化(输出)的声明必须事先完成,而不是基于测量,而是基于编译器的一般用途的假设/知识)
你的问题没有一个答案,只有很多方面可能会影响你的表现。
列表可能会延长,但我的观点是尽管考虑可能影响性能的因素而不了解构建和执行环境,但基本上无法预测性能会很有趣