【发布时间】:2014-04-26 23:01:43
【问题描述】:
在 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;
}
给予
wat.cpp:7:6:警告:从“int”转换为“int8_t {aka signed char}”可能会改变其值 [-Wconversion]
有没有办法抑制这个警告?为什么会出现这种情况?强制转换似乎不起作用。
【问题讨论】:
-
Clang 在这种情况下不会发出警告...
-
并非所有整数都是
ints.. -
不只是在 GCC 中。该标准将其定义为整体促销。
标签: c++ integer integer-promotion