☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

注意运算符优先级,避免非预期的结果

10.3.1 ID_unexpectedPrecedence
目录 › next › previous

对运算符优先级的错误理解是产生逻辑错误的主要原因之一。

位运算、赋值、三元等表达式作为子表达式时,合理使用括号既能保证正确性,又能提高可读性。由于运算符的特性各不相同,较为灵活,难以用一条规则来规范,本规则集合将分开讨论,与优先级有关的规则均作为本规则的相关规则以供参考。

示例:

int foo(bool cond) {
    return 1 + cond? 2: 3;  // Rather suspicious
}

加号的优先级大于三元运算符,但 cond 是 bool 型变量,所以这种情况十分可疑。

应合理使用括号:

int foo(bool cond) {
    return 1 + (cond? 2: 3);  // Right
}

相关

ID_macro_expNotEnclosed ID_macro_paramNotEnclosed ID_illBoolOperation ID_assignmentAsSubExpression ID_nonPostfixSubCondition ID_oddSubscripting

参考

CWE-783 C++ Core Guidelines ES.41 SEI CERT EXP00-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.