我正在使用别人的代码,该代码是用较旧的编译器编写的,它将特殊的BOOL
类型映射到unsigned int
,但在我的编译器中它映射到真正的bool
。在他的代码中的某些地方,他在<<
类型上使用了按位移位运算符bool
,这是我以前从未见过的,当我没有抱怨时,我的编译器让我感到惊讶。
这是有效的C ++吗? bool
是否自动升级为int
或uint
?
我看到this related question,它提供了另一个问题的一些清晰度,但它没有解决转换运算符。
来自Shift运营商[expr.shift]
操作数应为整数或无范围的枚举类型,并执行整体促销。结果的类型是提升的左操作数的类型
bool
是一个完整的类型,因此代码形成良好(bool
被提升为int
,结果是int
)。
从[conv.prom],我们展示了布尔人被提拔的整数:
bool
类型的prvalue可以转换为int
类型的prvalue,false
变为零并且真正成为one
之后,转变表现正常。 (谢谢,@ chris)
无论右侧是什么,移动bool的结果类型总是int。