我正在尝试使用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?
}};
Run Code Online (Sandbox Code Playgroud)
您可以在https://godbolt.org/g/wHNxoc上查看此代码.GCC表示getFoo()+ getBar()正在从int缩小到short int.什么导致upcast到int?除了强制转换为短整数之外,还有什么好的解决方案吗?
这是由于整体推广:
小整数类型(例如char)的prvalues可以转换为更大整数类型的prvalues(例如int).特别是, 算术运算符不接受小于int的类型作为参数,并且在左值到右值转换后自动应用整数促销(如果适用).此转换始终保留该值.
因此,getFoo() + getBar()
有一种int类型,导致上述警告.
要禁止警告,您可以使用static_cast:
static_cast<short>(getFoo() + getBar())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
152 次 |
最近记录: |