C++ 条件运算符性能

2024-04-27

我有一个条件语句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(使用前将#替换为@)

C++ 条件运算符性能 的相关文章

随机推荐