`short int` vs` int`

Должен ли я использовать short int вместо int? Есть ли какая-то полезная разница? Любые подводные камни?

Ответы

Ответ 1

Что сказал Бен. Фактически вы создадите менее эффективный код, поскольку все регистры должны выделять верхние биты всякий раз, когда выполняются какие-либо сравнения. Если вам не нужно сохранять память, потому что у вас их тонна, используйте собственный целочисленный размер. Для чего int.

РЕДАКТИРОВАТЬ: Даже не видел ваш вопрос о const. Использование const на внутренних типах (int, float) бесполезно, но любые указатели/ссылки должны быть абсолютно const, когда это применимо. То же самое и для методов класса.

Ответ 2

short vs int

Не утруждайте себя short, если нет веской причины, такой как сохранение памяти на значения gazillion или соответствие определенной макете памяти, требуемой другим кодом.

Использование большого количества различных целых типов просто вводит сложность и возможные ошибки обхода.

На современных компьютерах это может также привести к ненужной неэффективности.

Const

Посыпать const свободно, где бы вы ни находились.

const ограничивает то, что может измениться, что упрощает понимание кода: вы знаете, что эта зверька не собирается двигаться, поэтому ее можно игнорировать и думать о более полезных/важных вещах.

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

Кроме того, в чистом объявлении функции верхний уровень const для аргумента просто игнорируется компилятором. Но, с другой стороны, некоторые другие инструменты могут быть недостаточно умны, чтобы игнорировать их при сравнении чистых деклараций с определениями, и один человек процитировал это в более раннем обсуждении проблемы в группе comp.lang.С++ Usenet. Так что это зависит в некоторой степени от инструментальной цепочки, но, к счастью, я никогда не использовал инструменты, которые придают значение const s.

Приветствия и hth.,

Ответ 3

Абсолютно не в аргументах функции. Немногие вызывающие соглашения собираются сделать любое различие между short и int. Если вы создаете гигантские массивы, вы можете использовать short, если ваши данные соответствуют short, чтобы сохранить память и повысить эффективность кеша.

Ответ 4

Вопрос технически искажен "Должен ли я использовать short int?". Единственный хороший ответ будет: "Я не знаю, что вы пытаетесь выполнить?".

Но рассмотрим некоторые сценарии:

  • Вы знаете определенный диапазон значений, которые может принимать ваша переменная.

Диапазоны для целых чисел со знаком:

  • signed char — -2⁷ – 2⁷-1
  • short — -2¹⁵ – 2¹⁵-1
  • int — -2¹⁵ – 2¹⁵-1
  • long — -2³¹ & nd; 2³¹-1
  • long long — -2⁶³ – 2⁶³-1

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

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

Однако имеет смысл использовать signed char, если вы знаете, что вы можете вместить каждое потенциальное значение в диапазоне -128 — 127.

  1. Вы не знаете точный диапазон потенциальных значений.

В этом случае вы находитесь в довольно плохом положении, чтобы попытаться свести к минимуму использование памяти и, вероятно, должны использовать не менее int. Хотя он имеет тот же минимальный диапазон, что и short, на многих платформах он может быть больше, и это поможет вам.

Но большая проблема заключается в том, что вы пытаетесь написать часть программного обеспечения, которое работает с ценностями, диапазон которых вы не знаете. Возможно, что-то случилось раньше, чем вы начали кодирование (когда требования записывались).

  1. У вас есть представление о диапазоне, но осознайте, что он может измениться в будущем.

Спросите себя, насколько близко вы к границе. Если мы говорим о чем-то, что идет от -1000 до +1000 и может потенциально измениться на -1500 – 1500, то обязательно используйте short. Конкретная архитектура может использовать ваше значение, что означает, что вы не сохраните пространство, но ничего не потеряете. Однако, если мы имеем дело с некоторым количеством, которое в настоящее время -14000 – 14000, и может непредсказуемо расти (возможно, это какая-то финансовая ценность), а затем просто не переключайтесь на int, сразу перейдите к long. Вы потеряете некоторую память, но сэкономите много головной боли, поймав эти ошибки при переходе.

Ответ 5

short vs int. Если ваши данные будут вписываться в короткий, используйте короткий. Сохраните память. Помогите читателю узнать, сколько данных может поместиться вашей переменной.

использование const - отличная практика программирования. Если ваши данные должны быть const, сделайте const. Это очень полезно, когда кто-то читает ваш код.