Константами называют неизменяемые величины. Константы бывают литеральными (литералами) и типизированными. Литеральные константы характеризуются только своей величиной и неадресуемы. Типизированные константы имеют адрес и величину. Литеральные константы различаются на целые, вещественные (с плавающей точкой), символьные и строковые константы. Компилятор, выделив литеральную константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду.
Форматы констант, соответствующие каждому типу, приведены в
Таблица I.2. Константы в языке C++
Тип константы
| Формат
| Примеры
| Целая
| Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7)
Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
| 8, 0, 199226
01, 020, 07155
0хА, 0xlB8, 0X00FF
| Вещественная
| Десятичный: [цифры]. [цифры]
Экспоненциальный: [цифры][.][цифры]{Е||е}[+;-][цифры]
| 5.7, .001, 35.
0.2Е6,
.11е-3, .5Е10
| Символьная
| Один или два символа, заключенных в апострофы
| 'А', 'ю', '*', 'db', '\0', '\n', '\012', '\0x7\0x7'
| Строковая
| Последовательность символов, заключенная в кавычки
| "Это строка\n"
| |
Просмотрите их прямо сейчас.
Если требуется сформировать отрицательную целую или вещественную константу, то перед константой ставится знак унарной операции изменения знака (-), например: -218, -022, -0хЗС, -4.8, -0.1е4.
Вещественная константа в экспоненциальном формате представляется в виде мантиссы и порядка. Мантисса записывается слева от знака экспоненты (Е или е), порядок – справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Пробелы внутри числа не допускаются, а для отделения целой части от дробной используется не запятая, а точка.
Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Двухсимвольные константы занимают два байта и имеют тип int, при этом первый символ размещается в байте с меньшим адресом (о типах данных рассказывается в разделе 2.7).
Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или escape-последовательностями
Таблица I.3. Управляющие последовательности в языке C++
Изображение
| Шестнадцатеричный код
| Наименование
| \а
|
| Звуковой сигнал
| \b
|
| Возврат на шаг
| \f
| С
| Перевод страницы (формата)
| \n
| А
| Перевод строки
| \r
| D
| Возврат каретки
| \t
|
| Горизонтальная табуляция
| \v
| В
| Вертикальная табуляция
| \\
| 5С
| Обратная косая черта
| \’
|
| Апостроф
| \"
|
| Кавычка
| \?
| 3F
| Вопросительный знак
| \0ddd
| –
| Восьмеричный код символа
| \0xddd
| ddd
| Шестнадцатеричный код символа
| |
Символ обратной косой черты используется для представления:
- кодов, не имеющих графического изображения (например, \а – звуковой сигнал, \n – перевод курсора в начало следующей строки);
- символов апострофа ( ' ), обратной косой черты ( \ ), знака вопроса (?) и кавычки (");
- любого символа с помощью его шестнадцатеричного или восьмеричного кода, например, \073, \0xF5. Числовое значение должно находиться в диапазоне от 0 до 255.
Управляющая последовательность интерпретируется как одиночный символ. Если непосредственно за обратной косой чертой следует символ, не предусмотренный табл. I.3 Приложения I, результат интерпретации не определен. Если в последовательности цифр встречается недопустимая, она считается концом цифрового кода.
Управляющие последовательности могут использоваться и в строковых константах, называемых иначе строковыми литералами. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку:
"Издательский дом \"Питер\""
Все строковые литералы рассматриваются компилятором как различные объекты. Две одинаковые строки будут занимать две различные области памяти.
Длинную строковую константу можно разместить на нескольких строках, используя в качестве знака переноса обратную косую черту, за которой следует перевод строки. Эти символы игнорируются компилятором, а следующая строка воспринимается как продолжение предыдущей. Например, строка
"Никто не доволен своей \
внешностью, но все довольны \
своим умом"
полностью эквивалентна строке
"Никто не доволен своей внешностью, но все довольны своим умом".
Строковый литерал представляется массивом символов и в конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0. Поэтому длина строки всегда на единицу больше количества символов в ее записи.
Пустая символьная константа недопустима.