逻辑表达式及逻辑子表达式不应为常量
10.1.5 ID_constLogicExpression
对不改变程序流程的常量表达式进行逻辑判断是没有意义的。
示例:
if (false) { // Non-compliant
....
}
while (true || condition) { // Non-compliant
....
}
这种代码会使相应的控制语句或控制条件失效,往往是调试或维护过程中产生的残留代码,应及时去除。
又如:
int* fun();
if (fun == NULL) { // Non-compliant
....
}
函数地址、非动态创建的对象地址不会为空,这种地址与空指针比较往往意味着笔误。
例外:
while (true) { // Compliant
....
}
do {
....
} while (0); // Compliant
true 或 1 可作为 while 或 do-while 循环的条件,false 或 0 可作为 do-while 循环的条件。
constexpr if 语句的常量条件表达式用于编译期分枝控制,也不受本规则约束:
if constexpr (E) { // Compliant
....
}
其中 E 为常量表达式。