在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/

10-11 17:52