[英]What is the type of uint8_t multiplied by boolean value?
從標准來看,我試圖了解表達式最終會是哪種類型:
bool myBool;
[...]
uint8_t(255) * (myBool);
我保證myBool
會被轉換為uint8_t
(也就是unsigned char
),或者整個結果可能是int
嗎?
有用的鏈接: bool到int轉換
兩個操作數都將被提升為int
,這將是結果類型。
通常,整數操作數被提升為至少int
,或者如果需要則提升為更大的類型,並且不對較小的類型執行算術運算。 這由C ++ 11 4.5(整體促銷)描述。
對於uint8_t
:
1 /如果
int
可以表示源類型的所有值,則整數轉換等級小於int
的整數轉換等級的bool
,char16_t
,char32_t
或wchar_t
的整數類型的prvalue可以轉換為int
類型的prvalue。 否則,源prvalue可以轉換為unsigned int
類型的prvalue。
如果存在,那么所有8位uint8_t
值都可以由int
表示(必須至少為16位),因此int
是提升類型。
對於bool
:
6 /
bool
類型的prvalue可以轉換為int
類型的prvalue,false
變為零,true
變為1。
所以它也被提升為int
,給出整體結果類型int
。
從您鏈接到的文檔:
5表達式
9許多期望算術或枚舉類型操作數的二元運算符會以類似的方式引起轉換並產生結果類型。 目的是產生一個通用類型,它也是結果的類型。 這種模式稱為通常的算術轉換,定義如下:
...
- 否則,應在兩個操作數上執行整數促銷( conv.prom ) .1 )
和
4.5整體促銷
1如果int可以表示源類型的所有值,則可以將char,signed char,unsigned char,short int或unsigned short int類型的rvalue轉換為int類型的rvalue。 否則,源rvalue可以轉換為unsigned int類型的rvalue
...
4 bool類型的rvalue可以轉換為int類型的rvalue,false變為零,true變為1。
在您的情況下,LHS和RHS都將在算術運算之前被提升為int
,結果將是int
類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.