Булевские константы – это литералы true (истина) и false (ложь). Их можно использовать в логических выражениях и присваивать логическим переменным. В С++ действует также унаследованное из С правило, в соответствии с которым значению ложь соответствует число 0, а значению истина – любое число, отличное от 0.
Символьные константы
Символьные литералы – это один или несколько символов, заключенных в апострофы: ’A’, ’я’, ’+’, ’\n’. Перед начальным апострофом может размещаться буква L. Между апострофами может быть записан произвольный символ, кроме \, ‘, “,?. Эти символы записываются в виде ESC-последовательностей: \\, \’, \”, \?.
Ординарная односимвольная константа имеет тип char, записывается без ведущего символа L, состоит из одного символа. Ее значение эквивалентно числовому значению из применяемой в реализации кодовой таблицы символов (например, на IBM-совместимых компьютерах, таблицы кодов ASCII). Ординарная мультисимвольная константа имеет тип int и состоит из нескольких символов (ее значение зависит от реализации).
|
|
Константа, включающая ведущий символ L, имеет тип wchar_t и называется широкой (широкосимвольной). Значением широкой константы из одного символа является числовое значение кода из применяемой в реализации кодовой таблицы символов. Значение широкой константы из нескольких символов зависит от реализации.
Символьная константаможет использоваться как целая константа, причем ее значением является интерпретация внутреннего представления данного символа в виде целого значения. Символьная константа не может быть пустой.
Для визуального представления неграфических символов используются ESC-последовательности, записываемые между апострофами. ESC-последовательность начинается символом обратной дробной черты (\ - backslash) и может быть представлена:
· одним знаком:
переход на новую строку (\n),
горизонтальная табуляция (\t),
возврат каретки (\r),
звонок (\a),
обратная дробная черта (\\),
возврат на один шаг (backspace, \b);
нуль-символ окончания строки в С++(NULL) ‘\0’
· числом из 1.. 3 восьмеричных цифр, определяющим код символа; ‘\ooo’, где ooo – восьмеричные цифры, представляющие символ в таблице кодов ASCII (восьмеричное число в диапазоне от 0 до 377, превышение приводит к ошибке);
·. числом из 1-3 шестнадцатеричных цифр, определяющим код символа, (с предшествующей буквой X или х); так можно представить и печатаемый символ (за \x может быть записано любое количество шестнадцатеричныхцифр, однако значение не должно выходить за диапазон 0x00-0xFF). Любой неподходящий символ последовательности \ооо или \хhhh считается концом восьмеричного или соответственно шестнадцатеричного кода.
|
|
Например:
‘\x27’ – АSCII-код символа апострофа;
‘\xa’ – АSCII-код символа перехода на новую строку;
‘\40’ – АSCII-код пробела;
Таблица 1.5. Управляющие последовательности
(основные ESC-последовательности):
содержание | последовательность | обозначение | значение |
Новая строка | \n | NL (LF) | 0ха |
Возврат каретки | \r | CR | 0хd |
Звонок | \a | BEL | 0х7 |
Горизонтальная табуляция | \t | HT | 0х9 |
Вертикальная табуляция | \v | VT | 0хb |
Возврат на шаг | \b | BS | 0х8 |
Перевод формата | \f | FF | |
Обратная косая черта | \\ | \ | 0х5с |
Апостроф | \’ | ‘ | 0х27 |
Двойная кавычка | \” | “ | 0х22 |
Знак вопроса | \? | ? | |
Нулевой символ | ‘\0’ | NULL | |
Восьмеричный код | \ооо | ооо | |
Шестнадцатеричный код | \хhhh | hhh |
Вычислить размеры памяти, выделенной для символьных констант разных типов, помогут, например, операторы:
#include <iostream>
using namespace std;
int main() {
cout << sizeof 'z' << endl;
cout << sizeof '\n\t' << endl;
cout << sizeof L'\x4F' << endl;
cout << sizeof '\111' << endl;
_getch();
return 0;
}
Строковые константы
Строковый литерал – это последовательность символов, заключенная в двойные кавычки. Строка в С++ соответствует типу данных «массив символов» и может содержать любые символы алфавита языка, например: ”A”, ”строка”, ”string”, “\n”. Строки завершаются символом ’\0’ (компилятор автоматически добавляет ‘\0’).
При наличии символа L перед открывающей кавычкой, говорят о широкой строковой константе: L”A”, L”строка”, L”string”, L“\n”.
Пустая строка определяется как ”” и сохраняется как один символ ‘\0’, т.е.имеет длину, равную 1. Cимвольная константа и строка из одного символа не одно и то же: ’x’ не есть ”x”. Первое – это один символ, использованный для представления числового значения буквы х. Второе – строка, содержащая букву х и ‘\0’ (имеет длину 2). Поэтому при создании строки (как массива символов) необходимо предусматривать дополнительный байт на символ ‘\0’, а при инициализации такой строки в число инициализирующих элементов включать в качестве завершающего символа ’\0’.
Примеры строковых литералов:
”5” // строковый литерал из символов ’5’ и ’\0’
”symbol” // строковый литерал из семи символов, включая символ ’\0’
”\’” // строковый литерал из апострофа и завершающего нуля
”” // пустая строка (содержит только код завершающего нуля).
”a\tb\n”– //строковые литералы могут содержать управляющие последовательности;
// если этот литерал записан в операторе вывода, то на экран выводится: буква a;
//несколько пробелов, соответствующих значению символа табуляции;
//буква b. После этого происходит переход на следующую строку.
Компилятор объединяет две строковые константы, разделенные символами – разделителями и следующие одна за другой:
char *s= “Mi” “nsk”;
cout <<s << endl; //выведет на экран: Minsk
char *longStr = “Это длинная строка, которую”
“ мы разбили на 3 строки.”
“ Компилятор сам склеит строки.”
Длинную строковую константу можно разместить на нескольких строках, используя в качестве знака переноса обратную косую черту. Например, строка:
char *longStr1= “Никто не доволен своей \
внешностью, но все довольны \
своим умом”
эквивалентна сроке:
“Никто не доволен своей внешностью, но все довольны своим умом”.
Хотя длина строки в С++ практически не ограничена, текст программы не должен выходить за пределы ширины экрана для того, чтобы было удобно читать и распечатывать программу.