簡體   English   中英

縮小從 int 到 unsigned char 的轉換

[英]Narrowing conversion from int to unsigned char

當我嘗試編譯此代碼時

struct T
{
    unsigned char x;
};

int main()
{
    unsigned char a = 10;
    unsigned char b = 1;

    T t = {a + b};

    return 0;
}

我收到此錯誤:

錯誤:將 '(((int)a) + ((int)b))' 從 'int' 縮小到 { } [-Wnarrowing]| 中的 'unsigned char' 轉換

誰能解釋我為什么?

加法表達式的操作數正在進行積分提升

特別是,算術運算符不接受小於 int 的類型作為參數,並且在左值到右值轉換后自動應用整數提升(如果適用)。 此轉換始終保留該值。

您的ab被提升為intunsigned int ,添加,然后轉換回unsigned char

如果轉換是預期的程序行為(從您作為設計者的角度來看),您可以將其顯式轉換為您想要的類型。 顯式轉換不是縮小轉換。 隱式轉換是。 因此,如果我們將隱式轉換更改為顯式轉換,程序就不再是病態的。

T t = { static_cast<unsigned char>(a + b) };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM