-3

这是我在想的事情,当我在谷歌搜索时找不到答案(也许我不知道关键字)。只是出于好奇,没有在任何项目中实施。

哪个更快:

if (bool)
   return true;
else
   return false;

或者

bool ? true : false;
  • 他们平等吗?

  • 为什么?

  • 在每一种语言、每一种系统中,一个人都比另一个人快?

(如果有人知道微控制器、iOS 或 Java 的 Obj-C 的答案,我将非常感谢您对我的问题的回答)

编辑:我不知道这bool ? true : false叫做三元,正如我所说的“我不知道关键字”。

4

8 回答 8

4

这个问题有很多问题。

  1. 首先,语言没有性能特征。您无法衡量语言的性能。您只能衡量一种语言的实现。任何给定的语言都可以有很多不同的实现。

  2. 所有语言都支持与这两种语言等效的结构的想法是幼稚的……而且是不正确的。

  3. 某些东西可能在所有语言、所有实现和所有系统中以相同的方式执行的想法是异想天开的。

  4. 任何人都会知道的想法……对于所有语言、平台、硬件等都是异想天开的。

  5. 目前尚不清楚这两个话语的含义。在 Java(例如)中,它们的含义不同......第二个不是有效的语句......即使你添加了一个;......即使它是,它也不会返回任何东西。


话虽如此......在Java中(假设您return在第二种情况下添加了a):

  • 它们的意思相同,并且

  • 现代 Hotspot JIT 编译器可能会将它们编译为等效的本机代码;即可能没有性能差异。

于 2013-06-30T15:35:02.850 回答
1

至少在 Java 中,除了第一种情况下可以逐行调试之外,它们之间没有区别。对于这两种情况,编译后的字节码很可能完全相同。我怀疑在您询问的每个环境中都是如此。

于 2013-06-30T15:20:08.953 回答
1

通常更快的是

return bool;

这避免了条件产生的任何可能的分支,在具有昂贵分支未命中的 CPU 上更快。无论如何,优化编译器可能会删除分支,但由于这与语言无关,因此无法保证。

于 2013-06-30T15:21:22.473 回答
1

速度差异发生在机器代码级别,并且在该级别甚至无法猜测您将哪个习语编译到其中。因此,您的答案是:您的习语选择与表现之间没有相关性。大多数情况下它应该完全相同,但如果不是,将没有普遍适用的解释。

于 2013-06-30T15:24:32.263 回答
1

条件表达式与三元是有争议的。这是您在任何一种情况下都无法注意到差异的情况之一。

如果你有一个单一的if/else(应该是,不需要 else if 在那里),三元会更快。

但是,添加额外的检查更加困难,因为您需要链接三元: (conditional) ? ((conditional) ? true : false) : ((conditional) ? true : false)因此变得难以阅读。

如果可以扩展,最好的选择是使用switchif/else检查更快的 a。如果您希望允许多个 if 产生相同的结果,则尤其如此,但如果您使用数据类型检查,则它没有用,因为它使用松散比较(== and never === checks)。与一if/elseif/else对不同,switch如果你从不中断,它可能会使用更多的内存和时间。

于 2013-06-30T15:26:28.477 回答
0

性能方面两者Ternary都是if-else相同的。

三元运算符只是简写。它们编译成等效的 if-else 语句。

于 2013-06-30T15:23:44.917 回答
0

他们平等吗?

逻辑上是的。在这里做同样的事情。第二种称为三元运算符。

在每一种语言、每一种系统中,一个人都比另一个人快?

在java中没有区别。我怀疑是否还有其他语言的表演。即使是这样,那么我想差异将非常微不足道。您最好专注于更具可读性的代码。第一个肯定更具可读性。

于 2013-06-30T15:24:28.583 回答
0

它们在性能上几乎相等,或者如果不是,则存在非常非常微不足道的差异。

对于像您要求的那样简单的事情,我会使用三元运算符?:,因为它更短并且仍然非常易读。

当您需要执行多个语句时,请使用 if-else。

请记住,您还可以?:在 return 语句中使用:

return bool ? yes : no;

编辑:看起来您只想返回布尔值。如果你这样做了,那么你只需要输入:return bool;

于 2013-06-30T15:26:48.290 回答