`short int` против` int` - PullRequest
       8

`short int` против` int`

13 голосов
/ 15 декабря 2010

Стоит ли использовать short int вместо int?Есть ли полезная разница?Есть подводные камни?

Ответы [ 5 ]

15 голосов
/ 15 декабря 2010

короткая против INT

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

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

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

сопзЬ

Посыпать const обильно, где только можно.

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

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

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

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

9 голосов
/ 15 декабря 2010

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

8 голосов
/ 15 декабря 2010

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

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

1 голос
/ 12 мая 2015

Технически неправильно задан вопрос: «Стоит ли использовать short int?».Единственный хороший ответ будет: «Я не знаю, чего вы пытаетесь достичь?».

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

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

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

  • signed char - -2⁷ - 2⁷-1
  • short - -2¹⁵ - 2¹⁵-1
  • int - -2¹⁵ - 2¹⁵-1
  • long - -2³¹ - 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.Вы потеряете часть памяти, но избавите себя от головной боли, ловя эти ошибки при переворачивании.

0 голосов
/ 15 декабря 2010

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

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

...