Важность объявления переменной без знака - PullRequest
11 голосов
/ 16 сентября 2010

Важно ли объявлять переменную без знака, если вы знаете, что она никогда не должна быть отрицательной? Помогает ли это предотвратить что-либо, кроме отрицательных чисел, вводимых в функцию, которая не должна иметь их?

Ответы [ 14 ]

1 голос
/ 16 сентября 2010

Это также избавляет вас от необходимости приводить в / из unsigned что угодно при взаимодействии с другими интерфейсами.Например:

for (int i = 0; i < some_vector.size(); ++i)

Это, как правило, раздражает любого, кому нужно компилировать без предупреждений.

1 голос
/ 16 сентября 2010

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

0 голосов
/ 17 сентября 2010

Кроме того, я редко использую int или unsigned int, скорее, я использую либо {int16_t, int32_t, ...} или {uint16_t, uint32_t, ...}. (Вы должны включить stdint.h, чтобы использовать их.) Я не уверен, как мои коллеги находят его, но я пытаюсь таким образом передать размер переменной. В некоторых местах я стараюсь быть более откровенным, делая что-то вроде: typedef uint32_t Counter32;

0 голосов
/ 16 сентября 2010

Аргументом против использования unsigned является то, что вы можете оказаться в очень разумных ситуациях, когда возникают неловкие ситуации и появляются непреднамеренные ошибки. Рассмотрим класс - например, класс списка или что-то подобное - с помощью следующего метода:

unsigned int length() { ... }

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

for (unsigned int i = my_class.length(); i >= 0; --i) { ... }

Ваш цикл не прерывается, и теперь вы вынуждены разыграть или сделать какую-то другую неловкость.

Альтернативой использованию unsigned является просто assert, чтобы ваши значения были неотрицательными.

Ссылка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...