-7

哪个if语句更快,具有以下条件。似乎短路会编译成比非短路更多的指令。

bool force = false;
bool _isLoadingActual = true;
bool _isLoadingLoadCore = true;

int a = 0, b = 0;

if (force | !(_isLoadingActual | _isLoadingLoadCore))
{
    a = 1;
}

if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}
4

3 回答 3

3

这是最快的解决方案

a = 0;
b = 0;

由于您已经知道布尔变量的值。

不认真..第二个可能更快,因为它可以短路,也就是说,如果您没有将第一个布尔值硬编码为假!否则,短路似乎必须更快。

于 2013-02-21T03:00:45.053 回答
0

假设您的问题是“其中一个|||短路”:

  • ||是否短路- || 运算符(C# 参考)

    如果第一个操作数的计算结果为 false,则第二个运算符确定整个 OR 表达式的计算结果为 true 还是 false。

  • |不短路- | 运算符(C# 参考)

    对于布尔操作数,| 计算其操作数的逻辑或;也就是说,当且仅当它的两个操作数都为假时,结果才为假。

因此,在纯理论意义上的代码||会更快,而且很可能您将无法衡量实际代码差异的影响。

请注意,如果操作数的计算有副作用(不是您的情况,因为您已经有 bool 变量),则两个语句是不等价的。

于 2013-02-21T03:09:19.313 回答
0

我认为第二个代码更快。

if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}

因为这是一个短路评估

在上面的代码中,如果为真,则不需要检查force剩余条件 ( )。!(_isLoadingActual || _isLoadingLoadCore)

于 2013-02-21T02:59:00.553 回答