从standard开始,我试图了解表达式最终会是哪种类型:
bool myBool;
[...]
uint8_t(255) * (myBool);
我保证myBool
会被投放到uint8_t
(a.k.a。unsigned char
),或者整个结果可能是int
吗?
有用的链接:bool to int conversion
答案 0 :(得分:4)
两个操作数都将被提升为int
,这将是结果类型。
通常,整数操作数被提升为至少int
,或者如果需要则提升为更大的类型,并且不对较小的类型执行算术运算。这由C ++ 11 4.5(整体促销)描述。
uint8_t
:
1 /除
bool
,char16_t
,char32_t
或wchar_t
以外的整数类型的整数类型的整数转换等级小于{{1如果int
可以表示源类型的所有值,则可以转换为int
类型的prvalue;否则,源prvalue可以转换为int
类型的prvalue。
如果存在,那么所有8位unsigned int
值都可由uint8_t
表示(必须至少为16位),因此int
是提升类型。
int
:
6 /类型
bool
的prvalue可以转换为bool
类型的prvalue,int
变为零,false
成为一个。
因此,它也会提升为true
,整体结果类型为int
。
答案 1 :(得分:3)
从您链接到的文件:
5个表达
9许多期望算术运算或枚举操作的二元运算符 类型导致转换并以类似的方式生成结果类型。 目的是产生一种通用类型,它也是一种类型 结果。这种模式称为通常的算术转换, 其定义如下:
...
- 否则,应执行整体促销( conv.prom ) 在两个操作数上.1)
和
4.5整体促销
1 char类型的rvalue,signed char,unsigned char,short int或 如果是int,unsigned short int可以转换为int类型的rvalue 可以表示源类型的所有值;否则,来源 rvalue可以转换为unsigned int
类型的右值...
4 bool类型的rvalue可以转换为int类型的rvalue 假成为零,真正成为一个。
在您的情况下,LHS和RHS在算术运算之前将被提升为int
,结果将是int
类型。