2011-06-07 31 views
1

如果我编译克++以下程序并启用针对转化警告(-Wconversion)警告以g ++ 4.5.2 uint16_t与Wconversion

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

我得到一个警告,警告:转换从int到uint16_t可以改变它的价值。

精细,如果FOO 1 + = 1被解释为整型,但怎么样:

foo+=static_cast<uint16_t>(1); 

我得到了同样的警告,应该不是经营者工作时的类型有双方都是一样的,没有转换为int?

回答

2

我得到一个解释,它来自于C,但这个应该是同样有效的C++:

Specify a number literal as 8 bit?

对于算术,所有操作数都提升到int如果他们是小。这解释了这个问题,以及为什么它不会在初始化时触发,或者在转换时明确地转换,因为这个转换将被取消以计算与int s之和。

+0

这几乎使得复合操作符在“小”类型上不可用(从非警告的角度看)。 – 2011-06-07 13:27:49

+0

任何运算符的确,每个加法,乘法或其他都会将变量提升为int。 – rubenvb 2011-06-07 13:37:10