[英]C++ - Invalid narrowing conversion from “int” to “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 的類型作為參數,並且在左值到右值轉換后自動應用整數提升(如果適用)。 此轉換始終保留該值。
您的a
和b
被提升為int
或unsigned int
,添加,然后轉換回unsigned char
。
如果轉換是預期的程序行為(從您作為設計者的角度來看),您可以將其顯式轉換為您想要的類型。 顯式轉換不是縮小轉換。 隱式轉換是。 因此,如果我們將隱式轉換更改為顯式轉換,程序就不再是病態的。
T t = { static_cast<unsigned char>(a + b) };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.