考虑代码:
volatile unsigned int test;
unsigned char arr[]={test&0xff};
在这里,无论有什么价值test
,test&0xff
都将始终适合unsigned char
. 我仍然收到编译器警告:
警告:在 C++11 [-Wnarrowing] 中,将 {} 内的 '(((unsigned int)test) & 255u)' 从 'unsigned int' 缩小到 'unsigned char' 的转换范围不正确 [-Wnarrowing]
对于C++11中的任何值,缩小总是不正确的吗?
有没有办法在没有显式转换的情况下保留清晰的代码,但在这种情况下不会收到警告(以及 C++11 模式下的错误)?