使用Wconversion在g ++ 4.5.2 uint16_t中发出警告

时间:2011-06-07 11:38:32

标签: g++

如果我使用g ++编译以下程序并启用转换警告(-Wconversion)

#include<stdint.h>
int main() {
  uint16_t foo = 1;
  foo += 1;
  return 0;
}

我收到警告,警告:从int转换为uint16_t可能会改变其值。

很好,如果foo + = 1中的1被解释为int,那么:

foo+=static_cast<uint16_t>(1);

我得到相同的警告,当双方的类型相同时,操作员是否应该工作,没有转换为int?

1 个答案:

答案 0 :(得分:2)

我得到了一个解释,它来自C,但这在C ++中同样有效:

Specify a number literal as 8 bit?

对于算术运算,如果它们较小,则所有操作数都会提升为int。这解释了问题,以及为什么它不会在初始化时触发,或者在显式转换时触发,因为将撤消强制转换以计算int s的总和。