你可以在C++中逐位转换bool吗?

Phl*_*ous 15 c++ bit-shift

我正在使用别人的代码,该代码是用较旧的编译器编写的,它将特殊BOOL类型unsigned int映射到a,但在我的编译器中它映射到true bool.在他的代码一些地方他使用的按位移位运算符<<bool类型,这是我以前从未见过和我的编译器让我感到惊讶时,它并没有抱怨.

这是有效的C++吗?是bool自动升级为intuint

我看到了这个相关的问题,它提供了另一个问题的清晰度,但它并没有解决转变运算符.

And*_*dyG 10

来自Shift运算符 [expr.shift]

操作数应为整数或无范围的枚举类型,并执行整体促销.结果的类型是提升的左操作数的类型

bool是一个完整的类型,所以代码形式良好(bool被提升为int,结果是一个int).

[conv.prom]开始,我们展示了布尔值被提升的整数:

类型的prvalue bool可以转换为类型的prvalue int,false变为零并且真正成为one

之后,转变表现正常.(谢谢,@ chris)