Почему компилятор C# не жалуется на Overflow из-за этого очевидного «плохого» приведения?C#

Место общения программистов C#
Anonymous
Почему компилятор C# не жалуется на Overflow из-за этого очевидного «плохого» приведения?

Сообщение Anonymous »

Я не могу понять, почему компилируется приведенный ниже код.

Код: Выделить всё

public void Overflow()
{
Int16 s = 32767;
s = (Int16)  (s + 1);
}
Во время компиляции очевидно, что (s+1) больше не является Int16, поскольку мы знаем значение s.
И CLR позволяет выполнить приведение к:
  • К своему собственному типу
  • Или к любому из базовых типов (поскольку это безопасно)
Поскольку Int32 не является Int16, а Int16 не является базовым типом Int32.
Вопрос: Так почему же компилятор не дает сбоя при приведенном выше кастинге? Не могли бы вы объяснить это с точки зрения CLR и компилятора?

Подробнее здесь: https://stackoverflow.com/questions/955 ... bvious-bad

Вернуться в «C#»