gcc在 运算符中缩小转换

gcc narrowing conversion in + operator

本文关键字:缩小 转换 运算符 gcc      更新时间:2023-10-16

我正在尝试使用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())