编译按位 OR 时出现警告 C4805

warning C4805 when compiling bitwise OR

本文关键字:警告 C4805 OR 编译      更新时间:2023-10-16

我正在尝试通过以下方式将一些布尔标志转换为单个整数值:

bool flag1, flag2;
...
int  res = flag1 | (flag2 << 1);

我收到警告 (VC++2015(:

warning C4805: '|': unsafe mix of type 'bool' and type 'int' in operation

但是,如果我显式将 bool 转换为 int,它就会成功编译:

int  res = int(flag1) | (isCacheable << 1);

MSDN 表示">此警告是为布尔值和整数之间的比较操作生成的。

为什么编译器在编译按位 OR 时会生成警告 C4805?

是的,这是一个警告,因为当人们试图对布尔值进行逐位时,他们实际上意味着逻辑比较。应该没有任何理由对布尔值进行按位运算。