在Visual Studio 2015中,编译器(Visual C ++ 14.0)警告缩小转换(在警告级别4)。这是一个很好的功能,但似乎并未始终如一地应用。
例如,在以下代码中:
short bar(short s) {
return s * 2;
}
short foo(short s) {
int i = s * s;
return i; // warning C4242
}
short baz(short s) {
s *= 2;
return s;
}
所有三个函数应具有相同的效果(以整数精度计算乘法,然后将结果缩小为简短),但仅为foo发出警告:警告C4242:' return' :从' int'转换短缺'可能会丢失数据。
这是编译器的不一致,还是我的误解?有没有办法可以获得更多警告?