小编典典

切换 if-else 语句的优势

all

switch使用语句与使用if语句进行 30 个枚举的最佳实践是什么,unsigned其中大约 10
个具有预期的操作(目前是相同的操作)。需要考虑性能和空间,但并不重要。我已经抽象了这个片段,所以不要因为命名约定而讨厌我。

switch陈述:

// numError is an error enumeration type, with 0 being the non-error case
// fire_special_event() is a stub method for the shared processing

switch (numError)
{  
  case ERROR_01 :  // intentional fall-through
  case ERROR_07 :  // intentional fall-through
  case ERROR_0A :  // intentional fall-through
  case ERROR_10 :  // intentional fall-through
  case ERROR_15 :  // intentional fall-through
  case ERROR_16 :  // intentional fall-through
  case ERROR_20 :
  {
     fire_special_event();
  }
  break;

  default:
  {
    // error codes that require no additional action
  }
  break;       
}

if陈述:

if ((ERROR_01 == numError)  ||
    (ERROR_07 == numError)  ||
    (ERROR_0A == numError)  || 
    (ERROR_10 == numError)  ||
    (ERROR_15 == numError)  ||
    (ERROR_16 == numError)  ||
    (ERROR_20 == numError))
{
  fire_special_event();
}

阅读 75

收藏
2022-08-08

共1个答案

小编典典

使用开关。

在最坏的情况下,编译器将生成与 if-else 链相同的代码,因此您不会丢失任何东西。如果有疑问,请将最常见的情况首先放入 switch 语句中。

在最好的情况下,优化器可能会找到更好的方法来生成代码。编译器所做的常见事情是构建二叉决策树(在平均情况下保存比较和跳转)或简单地构建一个跳转表(根本不进行比较)。

2022-08-08