Интегральный тип по умолчанию (int
) получает привилегированный режим «первый среди равных» почти во всех языках. Таким образом, мы можем использовать это как значение по умолчанию, если нет причин предпочитать другой тип.
Такими причинами могут быть:
- Использование большего типа, если вы знаете, что вам нужен дополнительный диапазон, или меньшего типа, если вы хотите сохранить память и не обращать внимания на меньший диапазон.
- Использование типа без знака, чтобы убедиться, что вы не получите никаких «лишних» 1 в вашем целочисленном представлении, если намереваетесь использовать операторы смещения битов (
<<
и >>
).
- Если язык не гарантирует минимальный (или даже фиксированный) размер для типа (например, C / C ++ против C # / Java), и вы заботитесь о его свойствах, вам следует предпочесть некоторый механизм генерации типа с гарантированным размером (например,
int32_t
) - если ваша программа должна быть переносимой и предполагается, что она будет скомпилирована с другими компиляторами, это становится более важным.
Обновление (расширение на типы гарантированного размера)
Мое личное мнение таково, что типы без гарантированного фиксированного размера - это больше проблем, чем стоит сегодня. Я не буду вдаваться в исторические причины, которые их породили (кратко: переносимость исходного кода), но реальность такова, что в 2011 году очень немногие люди, если таковые имеются, смогут извлечь из них выгоду.
С другой стороны, есть много вещей, которые могут пойти не так при использовании таких типов:
- Тип не имеет необходимого диапазона
- Вы обращаетесь к основной памяти для переменной (возможно, для ее сериализации), но из-за порядкового номера процессора и нефиксированного размера типа вы в конечном итоге вносите ошибку
По этим причинам (и, возможно, есть и другие) использование таких типов в теории является основной болью. Кроме того, если extreme мобильность не является требованием, вы не получите никакой выгоды, чтобы компенсировать. И действительно, вся цель typedefs, например int32_t
, состоит в том, чтобы полностью исключить использование типов со свободным размером.
На практике, если вы знаете, что ваша программа не будет портирована на другой компилятор или архитектуру, вы можете игнорировать тот факт, что типы не имеют фиксированного размера, и обрабатывать их так, как если бы они были известным размером вашего компилятора использует для них.