gcc在 运算符中缩小转换
gcc narrowing conversion in + operator
我正在尝试使用GCC 6编译一些相当简单的C 代码,但要缩小转换警告。这是有问题的,因为我们将警告视为错误。
struct S {
short int a;
short int b;
};
short int getFoo();
short int getBar();
std::array<S, 2> arr = {{
{5, getFoo()},
{3, getFoo() + getBar()} // Narrowing conversion here?
}};
您可以在https://godbolt.org/g/whnxoc上看到此代码。GCC说getfoo(( getbar((从int向下缩小到简短的int。是什么导致上升到INT?这里有没有很好的解决方案,因为强迫施放效果要短?
它是由于积分促销所致:
小型整体类型(例如char(的provalues可以转换为 较大的积分类型的概念(例如int(。尤其, 算术操作员不接受小于INT的类型 参数,并在 如果适用,则可以转换。这种转换总是 保留值。
因此, getFoo() + getBar()
具有一种 int 的类型,导致上述警告。
要抑制警告,您可以使用 static_cast :
static_cast<short>(getFoo() + getBar())
相关文章:
- 奇怪的缩小转换在 g++ 编译器中加倍到浮点警告
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 为什么显式构造被视为(隐式)缩小转换?
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 为什么 gcc 警告只针对统一初始化缩小转换范围?
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- gcc在 运算符中缩小转换
- 从'::size_t'转换为'int'需要缩小转换范围
- 列表初始化时需要缩小转换范围
- 从'double'转换为'int'需要缩小转换范围
- 从“ int”到'int16_t {aka short int}'内部{}的“((int)a) -1)”的缩小转换
- 为什么缩小转换范围不能防止错误类型的map.insert()失败
- 在Linux上构建Ogre时出错:缩小转换范围
- C++ / OpenGL:纹理到像素图示例 - 缩小转换误差
- 如何禁用Visual Studio警告C4244,用于std::vector复制或使用隐式缩小转换进行赋值
- 有没有办法使用模板来避免缩小转换范围
- 如果第二个属性未支撑,则将与支撑初始化器配对缩小转换
- 如何禁用缩小转换警告
- 警告缩小转换范围(uint32 到 uint8)
- 从'float'转换为'LONG'需要缩小转换范围