Performance 如果/否则,首先测试true或false

Performance 如果/否则,首先测试true或false,performance,optimization,conventions,Performance,Optimization,Conventions,我有一个相当具体的问题 假设我在一个函数的末尾,正在决定是否返回true或false 我希望使用if/else语句来实现这一点,并且有两个选项:(示例为伪代码) 1) 检查是否先工作: if(resultVar != error){ return true; }else{ return false; } 2) 首先检查它是否失败: if(resultVar == error){ return false; }else{ return true; } 我的问题很

我有一个相当具体的问题

假设我在一个函数的末尾,正在决定是否返回true或false

我希望使用if/else语句来实现这一点,并且有两个选项:(示例为伪代码)

1) 检查是否先工作:

if(resultVar != error){
    return true;
}else{
    return false;
}
2) 首先检查它是否失败:

if(resultVar == error){
    return false;
}else{
    return true;
}
我的问题很简单:哪种情况更好(更快?更干净?)

我真正关注的是if/else本身,忽略了示例正在返回(但感谢您的回答)

函数更可能希望返回true而不是false

我意识到这两种情况做的是完全相同的事情,但只是按照它们做事情的顺序“颠倒”而已。我想知道其中一个是否比另一个有任何优势,一个是否比另一个稍微快一点,或者更严格地遵守惯例,等等

我也意识到这是非常挑剔的,我只是不知道是否有任何区别,哪一个最好(如果有关系的话)

澄清:


需要进行比较以返回布尔值。事实上,示例返回的内容与比较的发生方式没有多大关系。

这是迄今为止最清晰的:

return resultvar != error;

这将完全取决于语言和编译器。没有具体的答案。例如,在C语言中,这两种语言的编码方式非常类似:

return (resultVar!=error);

任何体面的编译器。

首先将其置为真,因为它可能会在汇编中对
跳转
命令进行元素化。但是,这种差异可以忽略不计,因为它是
else
,而不是
else if
。从技术上讲,可能存在差异,但在这种情况下,您不会看到性能差异。

两个示例中唯一的差异可能是运算符的实现。A!=运算符反转运算结果。因此,它增加了开销,但开销非常小。==是一个直接的比较

但是,根据您计划在If/else上执行的操作,如果只是给变量赋值,那么条件三元运算符(?)会更快。对于复杂的多值决策,开关/案例更灵活,但速度较慢

在您的情况下,这将更快:

return (resultVar == error) ? false : true;

为什么不
返回resultVar!=错误?完全不需要
if
。最好让编译器/优化器担心这类事情,并编写对您和以后维护它的人员最清楚的代码。无论如何,你的细微变化都可以被优化器重新组织,因此是无关的。我不熟悉这个语法,这是什么语言?@ SnAppAWAPA至少C、C++、java和C。编辑我的答案,因为忘记了返回。您可以在这里获得更多信息:@zenith有趣。我将不得不对此进行调查。我只想指出,
=可能会也可能不会在程序集中实际交换它。当我学习MIPS组装时,我相信有一个
equal
EQ
检查和一个
notequal
NEQ
检查。正因为如此,一个并不比另一个快。