![](/img/trans.png)
[英]Is there any rule about why is the redefinition of the enumerator ill-formed?
[英]Why is g++ saying about ill-formed narrowing when it's clearly well-defined in given case?
考慮一下代碼:
volatile unsigned int test;
unsigned char arr[]={test&0xff};
在這里,無論test
具有什么值, test&0xff
始終適合於unsigned char
。 我仍然收到編譯器警告:
警告:在{}中將'((((unsigned int)test)&255u)'從'unsigned int'轉換為'unsigned char'的轉換在C ++ 11中是錯誤的[-Wnarrowing]
對於C ++ 11中的任何值,縮小是否總是格式錯誤?
有沒有辦法在沒有顯式轉換的情況下保留清晰的代碼,但是在這種情況下不會得到警告(以及C ++ 11模式下的錯誤)?
我相信它將把它們放在一起,仍然可以獲得32位int。 是的,從技術上講,這些值可以放入一個char中,但這是操作輸出的類型,而不是其中的數據。 請注意,test和0xff均為32位。 嘗試轉換輸出:
(unsigned char)(test & 0xff)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.