Каково фактическое использование "подписанного" ключевого слова?
Я знаю, что целые числа без знака являются только положительными числами (и 0) и могут иметь двойное значение по сравнению с обычным int. Есть ли разница между
int variable = 12;
и
signed int variable = 12;
Когда и почему вы должны использовать подписанное ключевое слово?
Ответы
Ответ 1
Существует только один экземпляр, где вы можете использовать ключевое слово signed
. signed char
всегда отличается от "plain" char
, который может быть подписанным или неподписанным типом в зависимости от реализации.
С++ 14 3.9.1/1 говорит:
Определяется реализацией, может ли объект char
содержать отрицательные значения. Символы могут быть явно объявлены unsigned
или signed
. Обычные char
, signed char
и unsigned char
- три различных типа [...]
В других контекстах signed
является избыточным.
До С++ 14 (и в C) был второй экземпляр: бит-поля. Это было определено реализацией, будь то, например, int x:2;
(в объявлении класса) такая же, как unsigned int x:2;
или то же, что и signed int x:2
.
С++ 11 9.6/3 сказал:
Определяется реализацией того, подписано или не указано четное (без явно подписанного или без знака) char
, short
, int
, long
или long long
битовое поле.
Однако, поскольку С++ 14 это было изменено, так что int x:2;
всегда означает signed int
. Ссылка на обсуждение
Ответ 2
В случае int
нет никакой разницы. Это имеет значение только с char
, потому что
- не определено, подписан ли
char
или нет, и
-
char
, signed char
и unsigned char
- это три разных типа.
Поэтому вы должны использовать signed
, если вам нужен signed char
(что, вероятно, редко). Кроме этого, я не могу придумать причину.
Ответ 3
signed
- это целочисленный тип по умолчанию. Нет, нет никакого различия в примере, который вы дали. Существует разница только в случае char
.
Источник: Справочник по С++
Ответ 4
Нет разницы между двумя, где int. Вы можете включить слово, подписанное для форматирования, если вы также объявляете unsigned int, чтобы их было проще выстраивать в линию и делать читаемыми, но для всех целей и целей вам не нужно использовать подписанное ключевое слово.