为什么我可以将值大于127的int传递给char数组,而不是直接传递给char数组?

卡拉马佐夫罗斯

我知道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 };
杰斯珀·朱尔(Jesper Juhl)

当使用花括号进行初始化(也称为“统一初始化”)时,则不允许缩小转换。否则,值将被静默截断。

大多数编译器都有警告选项,您可以启用这些警告选项,以捕获发生截断的许多(但不是全部)实例。他们通常还具有可以将此类警告变为错误的选项。您应该使用这些选项。

如果要使用字节,则可以说std :: byte是正确的类型。或者(如果不能使用)std :: uint8_t

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章