Константы

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

Форматы констант, соответствующие каждому типу, приведены в таблице 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' для широких) является обязательным в составе набора символов реализации, поскольку играет особую роль в представлении строковых литералов.

В строковых литералах также допускается задавать любые символы из набора символов реализации, в том числе и управляющие последовательности. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку: "Издательский дом \"Питер\""

Тем не менее, апостроф разрешается задавать без обратной косой черты, например "Издательский дом 'Питер'"

Строковые константы, отделенные в программе только пробельными символами, при компиляции объединяются в одну.

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

"Никто не доволен своей \

внешностью, но каждый доволен \

своим умом"

эквивалентна строке

"Никто не доволен своей внешностью, но каждый доволен своим умом"

Кавычки пишутся только в начале и в конце многострочного литерала.

Строковые литералы так же, как и символьные, подразделяются на обычные (узкие) и широкие.