我知道char值不能表示为176,但是某些字节系统是无符号的(0-255),而另一些字节系统则是有符号的(-128至127)。在这种情况下,我使用的是unsigned,所以我只想创建一个简单的字节消息数组,但是当尝试放置一个大于127的值时出现此错误,但是如果我首先将其声明为int,则会避免该错误。有人可以详细解释为什么会这样吗?
方法1:不起作用。我收到此错误:将“ 176”的转换范围从“ int”缩小为“ char”
char m1[3]{ 176, 118, 1 };
方法2:有效
int b1 = 176;
char m1[3]{ b1, 118, 1 };
当使用花括号进行初始化(也称为“统一初始化”)时,则不允许缩小转换。否则,值将被静默截断。
大多数编译器都有警告选项,您可以启用这些警告选项,以捕获发生截断的许多(但不是全部)实例。他们通常还具有可以将此类警告变为错误的选项。您应该使用这些选项。
如果要使用字节,则可以说std :: byte是正确的类型。或者(如果不能使用)std :: uint8_t。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句