14 April 2023

C++ 核心指南目录

“If in doubt about operator precedence, parenthesize”

理由

避免错误。可读性。并非每个人都记得操作符优先级表格。

例子

const unsigned int flag = 2;
unsigned int a = flag;

if (a & flag != 0)  // bad: means a&(flag != 0)

注意:

我们建议程序员熟悉算术操作符、逻辑操作符的优先级顺序。但是针对位操作符和其他操作符混合在一起的运算,建议添加括号。

if ((a & flag) != 0)  // OK: works as intended

注意

你应该清楚哪些情况不要添加多余的括号,比如:

if (a < 0 || a <= max) {
    // ...
}

强化

  • 标记位操作符和其他操作符混用的情况
  • 标记赋值操作符不在最左边的情况