以下代碼是將自動推斷爲uint32_t。我試圖理解爲什麼如此。爲什麼這裏的類型被推斷爲uint32_t?
auto value = a + b * c;
其中a是int32_t,b是uint32_t,c是int。
以下代碼是將自動推斷爲uint32_t。我試圖理解爲什麼如此。爲什麼這裏的類型被推斷爲uint32_t?
auto value = a + b * c;
其中a是int32_t,b是uint32_t,c是int。
類型轉換規則有時候有點奇怪。 每種類型都有一個等級,但每個平臺都可以實現適合它們的轉換,通常只有很少的規則。
securecoding有一個很好的包裹起來:
整型轉換排名
每個整數型具有確定 轉換的方式執行整數轉換秩。排名是基於這樣的概念,即每個整數類型至少包含與其下面排列的 類型相同的位數。確定整數轉換等級 以下規則是在C標準定義的,子條款6.3.1.1 [ISO/IEC 9899:2011]:
沒有兩個符號整型應具有相同的等級,即使他們具有相同的表示形式。
有符號整數類型的排名應該大於任何帶有較低精度的有符號整數類型的排名。
長長整型的秩應大於長整型的秩,其應大於INT的秩更大,這應大於短整型的秩大於 ,其應比 至大於簽名字符的等級。
任何無符號整數類型的等級應等於相應的有符號整數類型的等級(如果有的話)。
任何標準整數類型的等級應大於任何具有相同寬度的擴展整數類型的等級。
char的等級應等於signed char和unsigned char的等級。
_Bool的排名應小於所有其他標準整數類型的排名。
任何枚舉類型的等級應等於兼容整數類型的等級。
任何擴展符號整型相對於另一個擴展符號整型具有相同精度的秩是 實現定義的,但仍然受到其他規則 確定所述整數轉換秩。
對於所有整數類型T1,T2和T3,如果T1的排名大於T2,T2的排名大於T3,則T1的排名大於T3。
整數轉換等級以通常的算術用於 轉換,以確定哪些轉換需要採取地方 支撐件上的混合整數類型的操作。
'uint32_t'的轉換等級高於'int32_t',並且(在您的系統上)'int' –