Почему компилятор не может сделать вывод, что большое число является длинным? - PullRequest
3 голосов
/ 21 июля 2010

Это компилирует

var fourGb = (long)4*1024*1024*1024;

Но это не удается

var fourGb = 4*1024*1024*1024;

С "Операция переполняется во время компиляции в проверенном режиме".

Так что, если компилятор знаетэто будет переполнение, почему нельзя сделать вывод, что тип переменной должен быть длинным?

Ответы [ 4 ]

4 голосов
/ 21 июля 2010

См. http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.80%29.aspx

Вы попросили умножить кучу целых чисел, чтобы получить ответ int согласно синтаксису C #Используйте 'L', если хотите длинную.

var fourGb = 4L * 1024 * 1024 * 1024;
2 голосов
/ 22 июля 2010

Я не думаю, что это хорошая идея, чтобы вывести тип переменной по результату вычисления.

2 голосов
/ 21 июля 2010

Вообразите шум, который может вызвать.«Но компилятор может понять, что выражение должно вычисляться так долго, почему среда выполнения не может этого сделать?»*

Важно, чтобы компилятор вычислял выражения так же, как и среда выполнения.Если это не так, редактирование константного выражения и замена константы переменной может внезапно вызвать сбой во время выполнения.Трудно диагностировать ошибку, непостоянные выражения по умолчанию не проверяются.

0 голосов
/ 21 июля 2010

На большинстве языков одинаково:

  • типы данных выражения следуют правилам приоритета
  • он приводится к типу данных "var" при назначении

Любое другое поведение может привести к непредвиденным последствиям

Возможно, вы:

...