bool 对象不应参与位运算、大小比较、数值增减
10.2.4 ID_illBoolOperation
bool 对象的值只能为真或假,不具有“大小”等数值意义,bool 对象参与位运算、大小比较、数值增减是不合理的。
示例:
bool foo(unsigned flags, unsigned flag) {
return flags & flag != 0; // Non-compliant
}
由于 != 的优先级高于 &,所以例中的 return 语句相当于先判断 flag 是否为 0,再将这个 bool 型的结果与 flags 按位与,这是没有意义的。
应改为:
bool foo(unsigned flags, unsigned flag) {
return (flags & flag) != 0; // Compliant
}
依据
ISO/IEC 14882:2003 5.2.6(1 2)
ISO/IEC 14882:2003 5.3.2(1 2)
ISO/IEC 14882:2003 D.1-deprecated
ISO/IEC 14882:2011 5.2.6(1 2)
ISO/IEC 14882:2011 5.3.2(1 2)
ISO/IEC 14882:2011 D.1-deprecated
参考
CWE-682
CWE-783
CWE-1024
CWE-1025
MISRA C 2004 12.7
MISRA C 2012 10.1
MISRA C++ 2008 5-0-21
SEI CERT EXP46-C