我在编译库时收到此警告。
警告:从“int”转换为“unsigned char”可能会改变其值
这会阻止我们使用编译器选项 -Werror。
任何人都可以建议解决此警告的方法吗???
编译器警告您
int
可能包含不适合 unsigned char
的值。
如果您绝对确定在这种情况下它总是适合,您可以使用
static_cast
告诉编译器
c = static_cast<unsigned char>(i);
编译器会相信你(如果不正确,那就是你的错)。
在黑暗中拍摄:
使用
static_cast
指示编译器您知道转换不会导致截断:int i; unsigned char c = static_cast<unsigned char>(i);
如果您不太确定,请查看
boost::numeric_cast
。
在这种情况下,它相当于 static_cast
,但更明确(更容易 grep / 搜索数字转换)。此外,它还执行绑定检查。
flags &= ~x;
对这种典型习惯用法发出警告的编译器是脑死亡的。