Справочное руководство по C++
Шрифт:
R.1 Введение
Это справочное руководство описывает язык программирования C++ по состоянию на май 1991. C++ - язык программирования общего назначения, базирующийся на языке программирования С [1] .
В дополнение к возможностям С язык C++ предоставляет классы, функции подстановки, перегрузку операций, перегрузку имен функций, постоянные типы, ссылки, операторы управления свободной памятью, проверку параметров функций и приведение типов. Все расширения С суммируются в §R.18.1. Различия между C++ и ANSI C++ приведены в §R.18.2 [2] .
1
"The C Programming Language" B. Kernighan, D. Ritchie. Prentice Hall, 1978, 1988.
2
American National Standard X3.159-1989. Американский национальный стандарт.
Расширения C++ версии 1985 года до данного описания суммируются в §R.18.1.2. Разделы, относящиеся к шаблонам типа (§R.14) и управлению особыми ситуациями (§R.15), являются местами планируемых расширений языка.
R.1.1 Обзор
Это руководство содержит следующее:
1. Введение.
2. Соглашения о лексических понятиях.
3. Основные понятия.
4. Стандартные преобразования.
5. Выражения.
6. Операторы.
7. Описания.
8. Описатели.
9. Классы.
10. Производные классы.
11. Контроль доступа к членам.
12. Специальные функции-члены.
13. Перегрузка.
14. Шаблоны типов.
15. Управление особыми ситуациями.
16. Препроцессорная обработка.
Приложение A: Сводка синтаксиса
Приложение B: Совместимость
R.1.2 Запись синтаксиса
В записи синтаксиса языка в этом руководстве синтаксические понятия обозначаются курсивом, а литеральные слова и символы шрифтом постоянной ширины. Варианты перечисляются на отдельных строках, за исключением тех немногих случаев, когда длинный список вариантов дается на одной строке с пометкой "один из". Необязательный терминальный или нетерминальный символ обозначается с помощью нижнего индекса "opt", поэтому
означает необязательное выражение, заключенное в фигурные скобки.
R.2 Соглашения о лексических понятиях
Программа на C++ состоит из одного или нескольких файлов (§R.3.3). С логической точки зрения файл транслируется за несколько проходов. Первый проход состоит в препроцессорной обработке (§R.16), на которой происходит включение файлов и макроподстановка. Работа препроцессора управляется с помощью команд, являющихся строками, первый символ которых отличный от пробела есть # ($$R2.1). Результат работы препроцессора есть последовательность лексем. Такую последовательность лексем, т.е. файл после препроцессорной обработки, называют единицей трансляции.
R.2.1 Лексемы
Существуют лексемы пяти видов: идентификаторы, служебные слова, литералы, операции и различные разделители. Пробелы, вертикальная и горизонтальная
Если входной поток разобран на лексемы до данного символа, то следующей лексемой считается лексема с максимально возможной длиной, которая начинается с этого символа.
R.2.2 Комментарии
Символы /* начинают комментарий, который завершается символами */. Такие комментарии не могут быть вложенными. Символы // начинают комментарий, который завершается концом этой строки. Символы //, /* и */ не имеют специального назначения в комментарии // и рассматриваются как обычные символы. Аналогично символы // и /* не имеют специального назначения внутри комментария /*.
R.2.3 Идентификаторы
Идентификатор - это последовательность букв и цифр произвольной длины. Первый символ должен быть буквой, символ подчеркивания _ считается буквой. Прописные и строчные буквы различаются. Все символы существенны.
R.2.4 Служебные слова
Перечисленные ниже идентификаторы фиксируются как служебные слова и в другом смысле не могут использоваться:
В дополнение к этому идентификаторы, содержащие двойное подчеркивание (__) резервируются для реализаций C++ и стандартных библиотек и пользователи не должны употреблять их.
В представлении программы на C++ в кодировке ASCII используются в качестве операций или разделителей следующие символы:
а следующие комбинации символов используются для задания операций:
Каждая операция считается отдельной лексемой.
В дополнении к этому следующие символы резервируются для препроцессора:
Определенные, зависящие от реализации, свойства, такие как тип операции sizeof ($$R5.3.2) или диапазоны базовых типов (§R.3.6.1) определяются в стандартных заголовочных файлах (§R.16.4)
Эти файлы являются частью ANSI стандарта для С. Кроме того заголовочные файлы
определяют типы самых важных библиотечных функций. Два последних файла входят в ANSI стандарт для С, файл ‹new.h› относится только к С++.