“operation”: 类型“type”与类型“type”的有符号位域的混合不安全
在将一位有符号位域与 bool
变量进行比较时生成此警告。 因为一位有符号位域只能包含值 -1 或 0,所以将其与 bool
比较很危险。 将 bool
与一位无符号位域进行混合不生成警告,因为它们与 bool
相同,只包含 0 或 1。
示例
下面的示例生成 C4807:
// C4807.cpp
// compile with: /W1
typedef struct bitfield {
signed mybit : 1;
} mybitfield;
int main() {
mybitfield bf;
bool b = true;
// try..
// int b = true;
bf.mybit = -1;
if (b == bf.mybit) { // C4807
b = false;
}
}