Я просто попытался установить Visual Studio 2015, и, пытаясь скомпилировать старый проект, я получил предупреждение
CS0675 Побитовое или оператор, используемый в операнде расширенного знака; рассматривать кастинг с меньшим беззнаковым типом сначала
для части кода, которая не дает такого же предупреждения при компиляции в Visual Studio 2013. Я узнал, что все, что требуется для воспроизведения, - это очень простой код:
short a = 0;
int b = 0;
a |= (short)b;
Теперь, я прочитал этот вопрос SO, я прочитал Eric Lippert сообщение в блоге по этому вопросу, и я быстро прочитал расширение знака, но я понимаю, что расширение знака происходит, когда вы отбрасываете из подписанного тип номера, состоящий из меньшего количества бит к одному с большим количеством бит, например, от short
до int
.
Но поскольку я отбрасываю от int
до short
, расширение знака не должно происходить, если я не ошибаюсь. Тот факт, что это не выдает предупреждения в более ранних версиях Visual Studio, приводит меня к мысли, что это должно быть ошибкой в компиляторе Visual Studio 2015 (Roslyn). Я не понимаю, как работает расширение знака и/или компилятор, или это скорее всего ошибка компилятора?
Update
Джон Скит отметил, что фактически существует расширение знака, так как оператор|
не определен для short
, и поэтому там неявный приведение к int
, прежде чем результат будет возвращен в short
еще раз. Однако компилятор не должен был выдавать это предупреждение, так как литье безвредно. В компиляторе Roslyn произошла ошибка, как указано в принятом ответе.