kar*_*ros 5 c++ unsigned signed byte char
我知道char值不能表示为176,但有些字节系统是无符号的(0-255),而其他字节系统是有符号的(-128到127).在这种情况下,我正在使用unsigned,所以我只是想创建一个简单的字节消息数组,但是当我尝试放置一个比127更高的值时我得到了这个错误,但如果我先将它声明为int,那么它会避免错误.有人可以详细解释为什么这有效吗?
方法1:不起作用.我收到这个错误:缩小'176'从'int'到'char'的转换
char m1[3]{ 176, 118, 1 };
Run Code Online (Sandbox Code Playgroud)
方法2:这是有效的
int b1 = 176;
char m1[3]{ b1, 118, 1 };
Run Code Online (Sandbox Code Playgroud)
当使用大括号进行初始化(也称为“统一初始化”)时,不允许缩小转换。否则它们就是,并且值只是被默默地截断。
大多数编译器都有警告选项,您可以启用这些选项来捕获发生截断的许多(但不是全部)实例。他们通常还具有可以将此类警告转变为错误的选项。您应该使用这些选项。
如果您想使用字节,那么std::byte可以说是正确的类型。或者(如果你不能使用它)std::uint8_t。