簡體   English   中英

如果在給定情況下定義明確,g ++為什么會說形式不正確的縮小?

[英]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.

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