【问题标题】:Performance boolean equality? [duplicate]性能布尔相等? [复制]
【发布时间】:2013-05-31 09:49:26
【问题描述】:

我想知道如果不使用会不会有很大的性能损失

if (MyBoolean) 

我用

if (MyBoolean == true)

我一直被告知 == boolean 是一个愚蠢的指令,因为所有语言都理解 if(bool) 但我想知道这两种评估布尔表达式的方式之间是否存在真正的区别。

感谢您的阅读

【问题讨论】:

  • 或许你可以看看这个stackoverflow.com/questions/1070063/…
  • 这种类型的更改会产生如此小的差异,以至于它变得完全无关紧要。您应该问的问题是哪个更具可读性。
  • 从不在 C 等语言中使用 if (MyBoolean == true),其中“true”是任何非零值。
  • 即使存在差异(没有),这也无关紧要 - 初学者似乎总是高估小优化的重要性,而不了解计算机的速度有多快。如果你能在一秒钟内完成计算机在一纳秒内能完成的事情(这大约是这条语句需要多长时间),那么你将需要 31 年一台电脑可以在一秒钟内完成。在您更好地了解计算机的工作原理之前,不要浪费时间担心这个问题。

标签: performance boolean


【解决方案1】:

没有。编译器非常聪明。它们将生成相同的二进制代码。

【讨论】:

  • 不一定,尤其是在两种表达不等价的许多语言中。
【解决方案2】:

优化后,两个代码的性能可能相同。但是,它们并不等同(至少在 C 语言家族中)。在这些语言中,true 只是许多非零整数之一。但是,如果“布尔值”恰好是任何其他非零整数,那么即使“布尔值”为真,比较也会失败。以下是 C 语言的示例:

Foo* makeFoo();

int main() {
    Foo* myFoo = makeFoo();
    if(myFoo) {
        printf("Successfully created a Foo object.\n");
    }
    // The following doesn't work, because true is just the number 1, and you can't place an object at that address.
    if(myFoo == true) {
        printf("You will never see this!\n");
    }
}

【讨论】:

    猜你喜欢
    • 2017-12-18
    • 2015-03-18
    • 2020-09-10
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多