警告缩小转换范围(uint32 到 uint8)

Warning narrowing conversion (uint32 to uint8)

本文关键字:uint8 uint32 缩小 转换 范围 警告      更新时间:2023-10-16

我有这个警告。你能帮我吗?

warning: narrowing conversion of ‘action’ from ‘uint32 {aka unsigned int}’ to ‘uint8 {aka unsigned char}’

如何安全地将 uint32 转换为 uint8 ?

谢谢

警告是正确的,这种转换具有潜在的危险(它会丢失 24 个更高的位)。

你可以通过使用显式强制转换来告诉编译器你真的想要这个[不安全]转换:

uint8_t my_byte_var = static_cast<uint8_t>(my_int32_var);

这应该禁止显示警告。

只有在使用列表初始化时才会出现缩小警告/错误,例如:

uint32_t action = 12345;
uint8_t val{action};

您可以只使用正常分配:

uint8_t val = action;

不过,缩小仍然会发生,因为12345无法适应uint8_t,所以你会剩下 9。如果您对此感到满意,那么这就是您的解决方案。如果没有,那么有一个警告是一件好事,因为您使用了错误的类型!