如果我使用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?
答案 0 :(得分:2)
我得到了一个解释,它来自C,但这在C ++中同样有效:
Specify a number literal as 8 bit?
对于算术运算,如果它们较小,则所有操作数都会提升为int
。这解释了问题,以及为什么它不会在初始化时触发,或者在显式转换时触发,因为将撤消强制转换以计算int
s的总和。