Константы
Константами называют неизменяемые величины. Есть логические, целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду. Программист может задать тип константы и явным образом.
Форматы констант, соответствующие каждому типу, приведены в таблице 1.1.
Таблица 1.1. Константы языка С++ | ||
Константа | Формат | Примеры |
Логическая | Обозначается ключевым словом true или false | true, false |
Целая | Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль | 8, 0, 199226 |
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0, 1, 2, 3, 4, 5, 6, 7) | 01, 020, 07155 | |
Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) | 0xA, 0x1B8, 0X00FF, 0X00ff | |
Вещественная | Десятичный: [цифры].[цифры] | 5.7, .001, 35 |
Экспоненциальный: [цифры][.][цифры]{E|e}[+|-][цифры] | 0.2E6, .11e-3, 5E10, 1.22E-10 | |
Символьная | Один или более символов, заключенных в апострофы | 'A', 'ю', '*', 'db', 'A', '\n', '\012', '\x07\x07' |
Строковая | Последовательность символов, заключенная в кавычки | "Здесь был Vasia", "\tСумма =\xF5\n" |
Допустимые диапазоны значений целых и вещественных констант приведены в таблице 1.2.
Таблица 1.2. Диапазоны значений основных типов данных для IBM PC | ||
Тип | Диапазон значений | Размер (байт) |
bool | true и false | |
signed char | -128 … 127 | |
unsigned char | 0 … 255 | |
signed short int | -32 768 … 32 767 | |
unsigned short int | 0 … 65 535 | |
signed int | -2 147 483 648 … 2 147 483 647 | |
unsigned int | 0 … 4 294 967 295 | |
signed long int | -2 147 483 648 … 2 147 483 647 | |
unsigned long int | 0 … 4 294 967 295 | |
float | 3.4e-38 … 3.4e+38 | |
double | 1.7e-308 … 1.7e+308 | |
long double | 3.4e-4932 … 3.4e+4932 |
Если требуется сформировать отрицательную целую или вещественную константу, то перед ней ставится знак унарной операции изменения знака (-), например, -218.
Вещественная константа в экспоненциальном формате представляется в виде мантиссы и порядка. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10 (например, 1.3e12 это 1,3 * 1012). При записи вещественного числа могут быть опущены либо целая часть, либо дробная, но, конечно, не обе сразу. Пробелы внутри числа не допускаются.
Символьный литерал - это один или более символов, заключенных в одиночные кавычки (апострофы). Внутри апострофов можно задать любой символ из набора символов реализации. Пустая символьная константа недопустима.
Если перед символьным литералом указан символ L, то литерал называется широким.Если L отсутствует, литерал называется обычным, или узким. Обычный символьный литерал имеет тип char, широкий - тип wchar_t (о типах - далее в этой лекции).
Некоторые символы набора реализации являются непечатаемыми.Они предназначены для управления процессом отображения печатаемых символов на экране или принтере. Для представления в программе непечатаемых символов используется управляющая последовательность ( escape sequence ) -последовательность символов, начинающаяся с обратной косой черты \ ( backslash ). Кроме того, символы ' (апостроф), " (кавычки), ? (вопрос) и сама обратная косая черта являются специальными символами и также представляются в виде управляющих последовательностей.
В общем виде управляющая последовательность может быть задана в двух формах:
\000
\xhhh
Здесь 000 представляет собой последовательность от одной до трех восьмеричных цифр, а hhh - последовательность от одной до трех шестнадцатеричных цифр, которая задает код символа. При выводе кода символа на принтер или экран вместо кода изображается печатаемый символ или выполняется определяемое кодом действие (например, перевод курсора на следующую строку).
Допустимые значения кодов ooo ( hhh ) определяются реализацией. Коды обычных символов и широких символов различаются. Нулевой символ '\0' (L'\0' для широких) является обязательным в составе набора символов реализации, поскольку играет особую роль в представлении строковых литералов.
В строковых литералах также допускается задавать любые символы из набора символов реализации, в том числе и управляющие последовательности. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку: "Издательский дом \"Питер\""
Тем не менее, апостроф разрешается задавать без обратной косой черты, например "Издательский дом 'Питер'"
Строковые константы, отделенные в программе только пробельными символами, при компиляции объединяются в одну.
Длинную строковую константу можно разместить на нескольких строках программы, используя в качестве знака переноса обратную косую черту, за которой следует перевод строки. Эти символы игнорируются компилятором, при этом следующая строка программы воспринимается как продолжение предыдущей. Например, строка
"Никто не доволен своей \
внешностью, но каждый доволен \
своим умом"
эквивалентна строке
"Никто не доволен своей внешностью, но каждый доволен своим умом"
Кавычки пишутся только в начале и в конце многострочного литерала.
Строковые литералы так же, как и символьные, подразделяются на обычные (узкие) и широкие.