如何修复此警告:从“int”转换为“unsigned char”可能会改变其值

问题描述 投票:0回答:3

我在编译库时收到此警告。

警告:从“int”转换为“unsigned char”可能会改变其值

这会阻止我们使用编译器选项 -Werror。

任何人都可以建议解决此警告的方法吗???

c++
3个回答
8
投票

编译器警告您

int
可能包含不适合
unsigned char
的值。

如果您绝对确定在这种情况下它总是适合,您可以使用

static_cast

告诉编译器
c = static_cast<unsigned char>(i);

编译器会相信你(如果不正确,那就是你的错)。


5
投票

在黑暗中拍摄:

使用

static_cast
指示编译器您知道转换不会导致截断:
int i; unsigned char c = static_cast<unsigned char>(i);

如果您不太确定,请查看

boost::numeric_cast

在这种情况下,它相当于

static_cast

,但更明确(更容易 grep / 搜索数字转换)。此外,它还执行绑定检查。


2
投票
最明显的答案是找出如何在编译器上禁用该警告。 从其他评论来看,你正在做:

flags &= ~x;

对这种典型习惯用法发出警告的编译器是脑死亡的。

© www.soinside.com 2019 - 2024. All rights reserved.