我刚刚尝试安装Visual Studio 2015,在尝试编译旧项目时,我收到了警告
CS0675按位或运算符用于符号扩展操作数; 首先考虑转换为较小的无符号类型
对于在Visual Studio 2013中编译时没有给出相同警告的代码片段.我发现重现所需的只是这个非常简单的代码:
short a = 0;
int b = 0;
a |= (short)b;
Run Code Online (Sandbox Code Playgroud)
现在,我已经阅读了这个问题,我已经阅读了Eric Lippert关于这个问题的博文,我很快就读到了符号扩展,但我的理解是当你从一个由较小数字组成的有符号数字类型中进行转换时会发生符号扩展的位以一个与位,更大数量的诸如short以int例如.
但是因为我从一个int到另一个short,所以如果我没有弄错的话就不会发生任何符号扩展.事实上,这不会在早期版本的Visual Studio中发出警告,这让我相信这必定是Visual Studio 2015编译器(Roslyn)中的一个错误.我是否误解了符号扩展和/或编译器如何在这里工作,或者这很可能是编译器错误?
Jon Skeet指出实际上确实发生了一个符号扩展,因为|没有定义运算符short,因此int在结果short再次转换之前会有一个隐式转换.但是,编译器不应该发出此警告,因为强制转换是无害的.在接受的答案中指出,Roslyn编译器中存在一个错误.