在gcc中,向小于int
的整数类型添加或减去常量会导致int
。
#include <cstdint>
#include <cstdio>
int main()
{
int8_t wat = 5;
printf("%zd\n", sizeof(wat + 1));
return 0;
}
给出4。在将简单的
+=
语句与-Wconversion
一起使用时,我注意到了这一点。设置了警告标志后,#include <cstdint>
int main()
{
int8_t wat = 5;
wat += 5;
return 0;
}
给
有什么办法可以抑制此警告?为什么会这样?投放似乎并不能解决问题。
最佳答案
根据C++标准
通常的算术转换包括积分提升
所以在这个表达
wat += 5;
相当于
wat = wat + 5;
赋值右侧的
wat
转换为int
类型,表达式wat + 5
的类型为int。当int
类型的值范围大于int8_t
类型的值时,编译器将发出警告。此外,警告消息还显示了如何消除警告: [-Wconversion]
关于c++ - 为什么将常量添加到int8_t会将其提升为更大的类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23317404/