2012-07-27 42 views
2

!=是否有什么特别原因会比==多使用?'if'是否测试'=='或'!='

我注意到,!=似乎更常见,但是想知道是否有一个原因。

+10

你知道他们做不同的事情,对吧? – cnicutar 2012-07-27 09:57:38

+4

我很好奇,如果这是真的。我在GCC源代码中对它进行了大量的处理,下面是我得到的结果:'grep -B 2“==”* .c | grep“if”| wc -l':22.3k次点击。使用'!='的同一个查询仅提供了:9.6k次点击。看起来像GCC开发者更喜欢'=='。 – ArjunShankar 2012-07-27 10:11:28

+5

@ArjunShankar:我对Linux源代码做了同样的事情:'=='有137k出现,'!='只有83k出现。数据似乎不支持问题中的断言。 – 2012-07-27 10:15:27

回答

2

如果你有这样的代码:

if (a == b) 
{ 
    // block 1 
} 
else 
{ 
    // block 2 
} 

它可以改写为:

if (a != b) 
{ 
    // block 2 
} 
else 
{ 
    // block 1 
} 

这两个例子做同样的事情。两者都不是比其他更有效率。如果一个人比另一个人使用更多,那么可能是个人偏好。

+6

第二个版本确实有一个小小的优势,那就是更容易发生错误,只是偶然使用一个单一的错误。 – 2012-07-27 10:00:38

+2

@EdHeal真的,但大多数(所有?)主要编译器会在做这些时发出警告 – stijn 2012-07-27 10:02:35

+0

@Mark - Isnt!=与==相比更快? – chochim 2012-07-27 10:03:47

2

你应该根据你试图表达的逻辑条件使用==!=。如果你关心这两个truefalse条件,即ifelse零件都然后切换净效应(如果它是一个简单的比较)就是其中的代码需要出现在哪一部分。

有一个编码风格,看(书)代码完成的上成型布尔表达式积极这表明该表达的东西正布尔表达式比那些表达负面的东西更容易理解部分。

如果您只关心评估为true的情况,例如,你只关心你何时平等(对于==)或者没有平等(对于!=),那么如果你选择正确的一个,你就不需要else部分。

1

大部分时间使用的偏好=或==将取决于内容:!

resultOfOperationOrCall = operationOrCall(...); 
if (resultOfOperationOrCall != somePredefinedErrorTypeValue) { 
// Normal processing 
} else { 
// Exception/error processing 
} 

这里使用=在逻辑上是比使用==

+0

'if(resultOfOperationOrCall == resultOK)'有什么问题? – 2012-07-27 11:57:55

+0

我没有看到'!='在逻辑上比在这里使用'=='更清楚。所写的代码不必要地脆弱。它假定没有特定的错误与成功相同,这通常是一个不好的假设。如果该函数返回其他错误会怎么样?即使它不是今天,如果它在未来会改变为返回其他错误,该怎么办?另外,我个人更喜欢首先有失败路线;它们通常很短,并且当故障路径位于距'if'条件数十行的'else'子句中时,难以遵循代码。 – jamesdlin 2012-07-27 12:14:16

+0

如果您有一些PredefinedErrorTypeValue但没有正常的结果值。在我的评论中somePredefinedErrorTypeValue可能为null,任何非空是正常的,只有null是一个错误(作为一个例子) – 2012-07-27 12:38:22

1

更清楚我喜欢!=,因为它是更明确(并且写入=的机会较少)。

+0

!=或==比较在CPU上完成一次在所有位上同时注册 – 2012-07-27 10:51:26

+1

为什么' =='需要测试所有的位?它只需要测试到第一个不匹配。如果所有的但最后一点都是一样的呢?在这种情况下,'!='仍然需要测试所有的位。这里'=='和'!='没有区别。 – 2012-07-27 11:11:21

+0

如果您害怕拼写错误,您如何避免错误地写'<='? – 2012-07-27 12:01:00

0

至于两个汇编代码==和!=所以目前的x86无效率或低效率的代码问题architecture.So它是给你。你可以使用其中的任何一个。

如果由于某种机器如果汇编代码不可用,则有效的或无效的来临都以图片作为由编译器通过执行一些额外的操作来实现(即添加额外的汇编代码)。

0

它的完全和完全取决于用户的需求感知&。我没有看到任何理由,为什么会使用!=超过==