-3

我希望每个人都会喜欢阅读这篇文章。

我在下面有两个 IF 语句

public int GetTax(Item item)
{
   int tax=0;
   if(item.Name.Equals("Book"))
   {
      tax = 10;
   }
   if(item.Imported)
   {
      tax += 5;
   }
   return tax;
}

我已经将上面的 if 条件转换为这个。

public int GetTax(Item item)
{
     return 5 * ((int)item.Name.Equals("Book") * 2 + ((int)item.Imported));
}

你觉得哪一个效率高?并证明为什么?

4

1 回答 1

1

如果按字面意思编译,第二种方法效率更高,因为没有分支。

只要有分支,就会有一些分支预测,可能会丢失,从而导致 CPU 重新执行机器指令。

话虽如此,根据编译器的不同,您编写的内容可能足够简单,可以优化为等效代码。这确实取决于您调用的返回类型。如果返回类型是布尔值,它们是等价的。

但是,如果例如,item.Imported实际上是整数类型,那么您给出的两个示例不等价,编译器可能无法将两者编译为同一事物。

因为优化非常依赖于编译器。如果最小化运行时间很重要,那么您只能确定是否对代码进行基准测试。

于 2012-09-04T09:41:32.673 回答