优化表达式和程序逻辑

请考虑以下准则:

  • 如果表达式的组件在其他表达式中使用,并且它们包含函数调用或者在使用之间存在函数调用,请将重复的值分配给局部变量。
  • 避免强制编译器在整数和浮点内部表示之间转换数字。 例如:
    float array[10];
    float x = 1.0;
    int i;
    for (i = 0; i< 9; i++)  {     /* No conversions needed */
         array[i] = array[i]*x;
         x = x + 1.0;
        }
    for (i = 0; i< 9; i++)  {     /* Multiple conversions needed */
         array[i] = array[i]*i;
        }

    如果必须使用混合方式算术,请尽可能在单独的计算中对整数和浮点算术进行编码。

  • 请勿将全局变量用作循环索引或边界。
  • 避免 goto 语句跳入循环的中间。 此类语句禁止某些优化。
  • 通过使掉线路径更有可能,提高代码的可预测性。 代码,例如:
    if (error) {handle error} else {real code}
    应写为:
    if (!error) {real code} else {error}
  • 如果 switch 语句的一个或两个案例的执行频率通常比其他案例高得多,请通过在 switch 语句之前单独处理这些案例来对这些案例进行分解。 如果可能,请通过检查值是否在要从数组获取的范围内来替换 switch 语句。
  • C++ 仅在必要时使用 块进行异常处理,因为它们可能会抑制优化。 try
  • 使数组下标表达式尽可能简单。