`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.
- Вы не знаете точный диапазон потенциальных значений.
В этом случае вы находитесь в довольно плохом положении, чтобы попытаться свести к минимуму использование памяти и, вероятно, должны использовать не менее int
. Хотя он имеет тот же минимальный диапазон, что и short
, на многих платформах он может быть больше, и это поможет вам.
Но большая проблема заключается в том, что вы пытаетесь написать часть программного обеспечения, которое работает с ценностями, диапазон которых вы не знаете. Возможно, что-то случилось раньше, чем вы начали кодирование (когда требования записывались).
- У вас есть представление о диапазоне, но осознайте, что он может измениться в будущем.
Спросите себя, насколько близко вы к границе. Если мы говорим о чем-то, что идет от -1000 до +1000 и может потенциально измениться на -1500 – 1500, то обязательно используйте short
. Конкретная архитектура может использовать ваше значение, что означает, что вы не сохраните пространство, но ничего не потеряете. Однако, если мы имеем дело с некоторым количеством, которое в настоящее время -14000 – 14000, и может непредсказуемо расти (возможно, это какая-то финансовая ценность), а затем просто не переключайтесь на int
, сразу перейдите к long
. Вы потеряете некоторую память, но сэкономите много головной боли, поймав эти ошибки при переходе.
Ответ 5
short vs int. Если ваши данные будут вписываться в короткий, используйте короткий. Сохраните память. Помогите читателю узнать, сколько данных может поместиться вашей переменной.
использование const - отличная практика программирования. Если ваши данные должны быть const, сделайте const. Это очень полезно, когда кто-то читает ваш код.