我有一个条件语句expensive_foo()
99.9% 的情况下这是错误的。我有一个条件语句bar
这在大约 50% 的情况下是正确的。
如果这两种说法都是正确的,我希望采取一些行动。所以我几乎肯定知道expensive_foo()
是假的,我只想在以下情况下检查它bar
是真的。
下面的代码会检查expensive_foo()
除非bar
是真的?或者它会检查expensive_foo()
每次?
if ( bar && expensive_foo() )
{
...
}
或者我需要制作这样的结构:
if ( bar )
{
if ( expensive_foo() )
{
...
}
}
逻辑与运算符&&
是短路的,这意味着当且仅当第一个操作数被评估为时,才能保证第二个操作数被评估true
。条件if (bar && foo)
and if (bar) if (foo)
是相同的。
鉴于foo
计算成本很高,你几乎肯定应该检查bar
第一的。虽然bar
分支预测器不能很好地预测,与计算相比,这是一个很小的影响foo
.
因此,结构可能应该是:
if (bar)
{
if (bool const foo = compute()) // expensive
{
// ...
}
}
请注意,所有这些结构意味着我们可能会也可能不会调用compute()
。如果您需要无条件调用该函数,那么您应该将其设为first查看。在这种情况下,应该利用对结果的成功分支预测。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)