Подтвердить что ты не робот

В чем разница между проверенными и непроверенными?

В чем разница между

checked(a + b)

и

unchecked(a + b)

?

4b9b3361

Ответ 1

Это операторы, которые проверяют (или не проверяют) переполнение в результате числовой операции. В случае checked возникает исключение OverflowException, если результат операции превышает минимальное или максимальное значение, допустимое для типа данных.

Более подробную информацию можно найти в MSDN.

Ответ 3

если a + b больше максимального значения типа данных, флажок будет выдавать исключение. Непроверенный перевернет значение переполнения и добавит его к нулю.

Ответ 4

Спецификация языка содержит хорошую статью о различиях.

Проверенные и непроверенные операторы используются для управления контекстом проверки переполнения для арифметических операций и преобразований интегрального типа.

class Test
{
   static readonly int x = 1000000;
   static readonly int y = 1000000;
   static int F() {
      return checked(x * y);      // Throws OverflowException
   }
   static int G() {
      return unchecked(x * y);   // Returns -727379968
   }
   static int H() {
      return x * y;               // Depends on default
   }
}

Ответ 5

Другие ответы охватывают разницу между ними. Стоит отметить, что если a и b являются плавающими, разница не будет. Он работает только для целых операций.

Существует также опция сборки, которую вы можете установить, чтобы все было проверено. Это будет означать, что ваше приложение работает немного медленнее, но вам не нужно будет проверять ваши арифметические операции.

Вот хорошая запись, описывающая некоторые подводные камни: http://www.codeproject.com/KB/cs/overflow_checking.aspx