【发布时间】:2012-09-07 15:24:29
【问题描述】:
我有一个条件语句 expensive_foo() 在 99.9% 的情况下是错误的。我有一个条件语句bar,这在大约 50% 的情况下是正确的。
如果两个陈述都是真的,我希望采取一些行动。所以我几乎可以肯定知道expensive_foo() 是假的,我只想在bar 是真的时检查它。
仅当bar 为真时,下面的代码是否会检查expensive_foo()?还是每次都会检查expensive_foo()?
if ( bar && expensive_foo() )
{
...
}
或者我需要做一个这样的结构:
if ( bar )
{
if ( expensive_foo() )
{
...
}
}
【问题讨论】:
-
逻辑布尔运算符短路,除非重载,也就是 yes,
foo只有在bar为真时才会被检查。不过,我不得不承认,我没有看到保存单个布尔比较对性能的好处.. -
好吧,提出这个问题会很聪明。
-
那么,你是
bar && heavy_method_yielding_foo()还是foo = heavy_method(); if(bar && foo) ...? -
这些都是重要的细节,没有这些,回答这个问题基本上是不可能的(或者答案不是你真正想要的)。
-
因为在您修改后,它不再适用。然后你编辑回来。
标签: c++ performance conditional conditional-statements