Ни C, ни C ++ не имеют типа, который может хранить «символы» как значения с некоторыми выделенными символьно-специфическими свойствами.В этом смысле «символьный» тип не существует ни в C, ни в C ++.
В обоих языках C ++ и C char
является целым типом.Он содержит чисел .Это просто наименьший (с точки зрения диапазона) целочисленный тип.Существует преобразование между char
и int
, точно так же, как оно существует между int
и long
или int
и short
.char
не имеет специального статуса среди других целочисленных типов (кроме того факта, что тип char
отличается от типа signed char
).
Литерал формы 'h'
в C ++ имеет тип char
, но, как и любой другой интегральный тип, он сопоставим с int
.Вот почему вы можете использовать его в case
метке так же, как в исходном примере.
Другими словами, ваш оригинальный код такой же "странный", как и
switch (next_option) {
case 1L: ...
// ...
}
быть.В этом случае аргумент switch
- это int
, а метка регистра - long
.Код действителен.Вы находите это удивительным?Возможно нет.Ваш пример с 'h'
не сильно отличается.