我正在使用别人的代码,该代码是用较旧的编译器编写的,它将特殊BOOL类型unsigned int映射到a,但在我的编译器中它映射到true bool.在他的代码一些地方他使用的按位移位运算符<<的bool类型,这是我以前从未见过和我的编译器让我感到惊讶时,它并没有抱怨.
这是有效的C++吗?是bool自动升级为int或uint?
我看到了这个相关的问题,它提供了另一个问题的清晰度,但它并没有解决转变运算符.
And*_*dyG 10
来自Shift运算符 [expr.shift]
操作数应为整数或无范围的枚举类型,并执行整体促销.结果的类型是提升的左操作数的类型
bool是一个完整的类型,所以代码形式良好(bool被提升为int,结果是一个int).
从[conv.prom]开始,我们展示了布尔值被提升的整数:
类型的prvalue
bool可以转换为类型的prvalueint,false变为零并且真正成为one
之后,转变表现正常.(谢谢,@ chris)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |