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

问题描述 投票:15回答:2

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

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

我看到this related question,它提供了另一个问题的一些清晰度,但它没有解决转换运算符。

c++ bit-shift
2个回答
10
投票

来自Shift运营商[expr.shift]

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

bool是一个完整的类型,因此代码形成良好(bool被提升为int,结果是int)。

[conv.prom],我们展示了布尔人被提拔的整数:

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

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


0
投票

无论右侧是什么,移动bool的结果类型总是int。

© www.soinside.com 2019 - 2024. All rights reserved.