初始化有符号值时,避免来自C ++编译器的截断警告

时间:2010-11-18 20:18:49

标签: c++ initialization warnings truncation

我想将short初始化为十六进制值,但我的编译器会给出截断警告。很明显,它认为我试图将short设置为正值。

short my_value = 0xF00D; // Compiler sees "my_value = 61453"

你会如何避免这种警告?我可以使用负值,

short my_value = -4083; // In 2's complement this is 0xF00D

但在我的代码中使用十六进制更容易理解。

2 个答案:

答案 0 :(得分:3)

施放常数。

short my_value = (short)0xF00D;

编辑:初步解释在我脑海中有意义,但进一步反思有点不对劲。不过,这应该会抑制警告,并给你你所期望的。

答案 1 :(得分:0)

您正在分配一个不合适的int值,因此警告。你可以通过使用c-type强制转换来沉默编译器,但这通常是一种不好的做法。

更好的方法是不要这样做,并指定负值。或者,如果十六进制值更有意义,则切换到unsigned short。