Начало
формы
Конец
формы
Бьeрн Страустрап.
Справочное руководство по C++
—————————————————————
Второе
дополненное издание
—————————————————————
Это
справочное руководство описывает язык
программирования С++ по
состоянии
на май 1991. С++ — язык программирования
общего назначения,
базирующийся
на языке программирования С Ь.
Ь
«The C Programming Language» B. Kernighan, D. Ritchie.
Prentice
Hall,
1978, 1988.
Есть
русский перевод: «Язык программирования
С. Задачи по языку С»
Б.
Керниган, Д. Ритчи, А. Фьюер. «Финансы
и статистика». 1984
В
дополнение к возможностям С язык С++
предоставляет классы, функции
подстановки,
перегрузку операций, перегрузку имен
функций, постоянные
типы,
ссылки, операторы управления свободной
памятью, проверку
параметров
функций и приведение типов. Все расширения
С суммируются
в
$$R.18.1. Различия между С++ и ANSI C++ приведены
в $$R.18.2 Ь.
Ь
American National Standard X3.159-1989. Американский
национальный
стандарт.
Расширения
С++ версии 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»,
поэтому
{
выражение opt }
означает
необязательное выражение, заключенное
в фигурные скобки.
R.2 Соглашения о лексических понятиях
Программа
на С++ состоит из одного или нескольких
файлов ($$R.3.3).
С
логической точки зрения файл транслируется
за несколько проходов.
Первый
проход состоит в препроцессорной
обработке ($$R.16), на которой
происходит
включение файлов и макроподстановка.
Работа препроцессора
управляется
с помощью команд, являющихся строками,
первый символ
которых
отличный от пробела есть # ($$R2.1). Результат
работы
препроцессора
есть последовательность лексем. Такую
последовательность
лексем,
т.е. файл после препроцессорной обработки,
называют
единицей
трансляции.
R.2.1 Лексемы
Существуют
лексемы пяти видов: идентификаторы,
служебные слова,
литералы,
операции и различные разделители.
Пробелы, вертикальная
и
горизонтальная табуляция, конец строки,
перевод строки и комментарии
(все
вместе «обобщенные» пробелы), как
указано ниже, игнорируются,
за
исключением того, что они отделяют
лексемы. Обобщенные пробелы
нужны,
чтобы разделить стоящие рядом
идентификаторы, служебные
слова
и константы.
Если
входной поток разобран на лексемы до
данного символа, то
следующей
лексемой считается лексема с максимально
возможной длиной,
которая
начинается с этого символа.
R.2.2
Комментарии
Символы
/* начинают комментарий, который
завершается символами */.
Такие
комментарии не могут быть вложенными.
Символы // начинают
комментарий,
который завершается концом этой строки.
Символы //,
/*
и */ не имеют специального назначения в
комментарии // и
рассматриваются
как обычные символы. Аналогично символы
// и /*
не
имеют специального назначения внутри
комментария /*.
Соседние файлы в папке C++
- #
- #
- #
- #
Конец
Книга закончилась. Надеемся, Вы провели время с удовольствием!
Поделитесь, пожалуйста, своими впечатлениями:
Оглавление:
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
2
-
2
-
2
-
2
-
3
-
3
-
3
-
3
-
4
-
4
-
5
-
5
-
5
-
5
-
6
-
6
-
6
-
6
-
6
-
6
-
6
-
7
-
7
-
7
-
7
-
7
-
8
-
9
-
9
-
9
-
9
-
9
-
10
-
10
-
10
-
10
-
10
-
11
-
12
-
13
-
13
-
13
-
14
-
14
-
14
-
15
-
15
-
15
-
15
-
15
-
15
-
15
-
16
-
16
-
16
-
16
-
16
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
17
-
18
-
18
-
18
-
18
-
18
-
18
-
19
-
19
-
19
-
19
-
20
-
20
-
20
-
21
-
21
-
21
-
22
-
22
-
23
-
23
-
23
-
23
-
24
-
24
-
24
-
24
-
25
-
25
-
25
-
26
-
27
-
27
-
27
-
27
-
28
-
29
-
29
-
29
-
30
-
30
-
30
-
31
-
31
-
31
-
32
-
32
-
32
-
33
-
34
-
34
-
35
-
35
-
35
-
35
-
36
-
36
-
36
-
37
-
37
-
37
-
37
-
38
-
38
-
38
-
38
-
39
-
40
-
40
-
40
-
41
-
41
-
42
-
42
-
43
-
44
-
44
-
45
-
45
-
45
-
45
-
45
-
45
-
45
-
45
-
45
-
46
-
46
-
46
-
47
-
47
-
47
-
47
-
48
-
48
-
48
-
48
-
48
-
49
-
49
-
49
-
49
-
49
-
50
-
50
-
50
-
50
-
51
-
51
-
51
-
51
-
51
-
52
-
52
-
52
-
52
-
52
-
52
-
52
-
53
-
53
-
53
-
54
-
54
-
55
-
55
-
55
-
55
-
55
-
55
-
55
-
56
-
56
-
57
-
57
-
57
-
57
-
57
-
58
-
58
-
58
-
58
-
58
-
58
-
58
-
58
-
58
-
58
-
59
-
59
-
59
-
59
-
59
-
59
-
59
-
59
-
60
-
60
-
60
-
60
-
60
-
60
-
60
-
60
-
61
-
61
-
61
-
61
-
61
-
62
-
62
Бьярн Страустрап. Справочное руководство по C++
Второе дополненное издание
* СПРАВОЧНОЕ РУКОВОДСТВО
R.1 Введение
Это справочное руководство описывает язык программирования C++ по состоянию на май 1991. C++ — язык программирования общего назначения, базирующийся на языке программирования С[1].
В дополнение к возможностям С язык C++ предоставляет классы, функции подстановки, перегрузку операций, перегрузку имен функций, постоянные типы, ссылки, операторы управления свободной памятью, проверку параметров функций и приведение типов. Все расширения С суммируются в §R.18.1. Различия между C++ и ANSI C++ приведены в §R.18.2[2].
Расширения 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», поэтому
{выражениеopt}
означает необязательное выражение, заключенное в фигурные скобки.
R.2 Соглашения о лексических понятиях
Программа на C++ состоит из одного или нескольких файлов (§R.3.3). С логической точки зрения файл транслируется за несколько проходов. Первый проход состоит в препроцессорной обработке (§R.16), на которой происходит включение файлов и макроподстановка. Работа препроцессора управляется с помощью команд, являющихся строками, первый символ которых отличный от пробела есть # ($$R2.1). Результат работы препроцессора есть последовательность лексем. Такую последовательность лексем, т.е. файл после препроцессорной обработки, называют единицей трансляции.
R.2.1 Лексемы
Существуют лексемы пяти видов: идентификаторы, служебные слова, литералы, операции и различные разделители. Пробелы, вертикальная и горизонтальная табуляция, конец строки, перевод строки и комментарии (все вместе «обобщенные» пробелы), как указано ниже, игнорируются, за исключением того, что они отделяют лексемы. Обобщенные пробелы нужны, чтобы разделить стоящие рядом идентификаторы, служебные слова и константы.
Если входной поток разобран на лексемы до данного символа, то следующей лексемой считается лексема с максимально возможной длиной, которая начинается с этого символа.
R.2.2 Комментарии
Символы /* начинают комментарий, который завершается символами */. Такие комментарии не могут быть вложенными. Символы // начинают комментарий, который завершается концом этой строки. Символы //, /* и */ не имеют специального назначения в комментарии // и рассматриваются как обычные символы. Аналогично символы // и /* не имеют специального назначения внутри комментария /*.
R.2.3 Идентификаторы
Идентификатор — это последовательность букв и цифр произвольной длины. Первый символ должен быть буквой, символ подчеркивания _ считается буквой. Прописные и строчные буквы различаются. Все символы существенны.
R.2.4 Служебные слова
Перечисленные ниже идентификаторы фиксируются как служебные слова и в другом смысле не могут использоваться:
asm continue float new signed try
auto default for operator sizeof typedef
break delete friend private static union
case do goto protected struct unsigned
catch double if public switch virtual
char else inline register template void
class enum int return this volatile
const extern long short throw while
В дополнение к этому идентификаторы, содержащие двойное подчеркивание (__) резервируются для реализаций C++ и стандартных библиотек и пользователи не должны употреблять их.
В представлении программы на C++ в кодировке ASCII используются в качестве операций или разделителей следующие символы:
! % ^ & * ( ) — + = {} | ~
[ ] ; ‘: » ‹ › ? , . /
а следующие комбинации символов используются для задания операций:
-› ++ — .* -›* ‹‹ ›› ‹= ›= == != &&
|| *= /= %= += -= ‹‹= ››= &= ^= |= ::
Каждая операция считается отдельной лексемой.
В дополнении к этому следующие символы резервируются для препроцессора:
# ##
Определенные, зависящие от реализации, свойства, такие как тип операции sizeof ($$R5.3.2) или диапазоны базовых типов (§R.3.6.1) определяются в стандартных заголовочных файлах (§R.16.4)
‹float.h› ‹limits.h› ‹stddef.h›
Эти файлы являются частью ANSI стандарта для С. Кроме того заголовочные файлы
‹new.h› ‹stdarg.h› ‹stdlib.h›
определяют типы самых важных библиотечных функций. Два последних файла входят в ANSI стандарт для С, файл ‹new.h› относится только к С++.
R.2.5 Литералы
Есть несколько видов литералов (часто называемых «константами»).
литерал:
целая константа
символьная константа
константа с плавающей точкой
строка литералов
R.2.5.1 Целые константы
Все целые константы, состоящие из последовательности цифр, считаются десятичными (основание счисления десять), если только они не начинаются с 0 (цифра ноль). Последовательность цифр, начинающаяся с 0, считается восьмеричным целым (основание счисления восемь). Цифры 8 и 9 не являются восьмеричными. Последовательность цифр, начинающаяся с 0x или 0X, считается шестнадцатеричным целым (основание счисления шестнадцать). Шестандцатеричные цифры могут состоять из символов от a или A до f или F с десятичными значениями их от десяти до пятнадцати. Например, число двенадцать можно записать как 12, 014 или 0XC.
Тип целой константы определяется ее представлением, значением и окончанием. Если она десятичная и не имеет окончания, ее тип будет первым подходящим для ее значения из следующих типов: int, long int, unsigned long int. Если она восьмеричная или шестнадцатеричная и не имеет окончания, ее тип будет первым подходящим для ее значения из следующих: int, unsigned int, long int, unsigned long int. Если она оканчивается символом u или U, ее тип будет первым подходящим для ее значения из следующих: unsigned int, unsigned long int. Если она оканчивается символом l или L, ее тип будет первым подходящим для ее значения из следующих: long int, unsigned long int. Если она оканчивается на ul, lu, uL, Lu, Ul, lU, UL или LU, ее типом будет unsigned long int.
R.2.5.2 Символьные константы
Символьной константой является один или несколько символов, заключенные в одиночные кавычки, например ‘x’. Константа из одного символа имеет тип char. Значение константы из одного символа есть порядковый номер символа в таблице кодировки символов на данной машине. Символьные константы из нескольких символов имеют тип int. Значение такой константы зависит от реализации. Некоторые символы, не имеющие графического представления, как одиночная кавычка ‘, двойная кавычка «, знак вопроса ?, обратная дробная черта , можно представлять комбинацией символов (начинающейся с ) в соответствии с приводимой ниже таблицей:
конец строки NL (LF) n горизонтальная табуляция HT t вертикальная табуляция VT v шаг назад BS b возврат каретки CR r перевод формата (авторегистр) FF f сигнал BEL a обратная дробная черта \ знак вопроса ? ? одиночная кавычка ‘ ‘ двойная кавычка » » восьмеричное число ooo ooo шестнадцатеричное число hhh xhhh
Если за обратной дробной чертой следует символ, отличный от перечисленных, результат неопределен. Комбинация ooo состоит из обратной дробной черты, а которой следуют одна, две или три восьмеричные цифры. Считается, что они определяют значение искомого символа. Комбинация xhhh состоит из из обратной дробной черты, за которой следует x, а за ним, в свою очередь, следует последовательность шестнадцатеричных цифр. Считается, что она задает значение искомого символа. Нет ограничения на длину этой последовательности шестнадцатеричных цифр. Последовательность восьмеричных или шестнадцатеричных цифр оканчивается, когда встречается первый символ, который не есть восьмеричная или шестнадцатеричная цифра соответственно. Если значение символьной константы превосходит максимальное из char, то оно определяется реализацией.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Доступные форматы для скачивания:
Скачать в формате FB2 (Размер: 98 Кб)
Скачать в формате DOC (Размер: 103кб)
Скачать в формате RTF (Размер: 103кб)
Скачать в формате TXT (Размер: 71кб)
Скачать в формате HTML (Размер: 101кб)
Скачать в формате EPUB (Размер: 147кб)
В книге рассказывается история главного героя, который сталкивается с различными
проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает
множество второстепенных персонажей, которые играют важные роли в истории. Благодаря
опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и
стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает
ценные уроки жизни и растет как личность. Книга завершается финалом, связывающим воедино
темы и сюжетные линии, исследуемые на протяжении всей истории. В целом, книга
представляет собой увлекательное и наводящее на размышления чтение, которое исследует
человеческий опыт уникальным и осмысленным образом.
R.1 Введение
Это справочное руководство описывает язык программирования C++ по состоянию на май 1991. C++ — язык программирования общего назначения, базирующийся на языке программирования С[1].
В дополнение к возможностям С язык C++ предоставляет классы, функции подстановки, перегрузку операций, перегрузку имен функций, постоянные типы, ссылки, операторы управления свободной памятью, проверку параметров функций и приведение типов. Все расширения С суммируются в §R.18.1. Различия между C++ и ANSI C++ приведены в §R.18.2[2].
Расширения 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», поэтому
>{выражение>opt}
означает необязательное выражение, заключенное в фигурные скобки.
R.2 Соглашения о лексических понятиях
Программа на C++ состоит из одного или нескольких файлов (§R.3.3). С логической точки зрения файл транслируется за несколько проходов. Первый проход состоит в препроцессорной обработке (§R.16), на которой происходит включение файлов и макроподстановка. Работа препроцессора управляется с помощью команд, являющихся строками, первый символ которых отличный от пробела есть # ($$R2.1). Результат работы препроцессора есть последовательность лексем. Такую последовательность лексем, т.е. файл после препроцессорной обработки, называют единицей трансляции.
R.2.1 Лексемы
Существуют лексемы пяти видов: идентификаторы, служебные слова, литералы, операции и различные разделители. Пробелы, вертикальная и горизонтальная табуляция, конец строки, перевод строки и комментарии (все вместе «обобщенные» пробелы), как указано ниже, игнорируются, за исключением того, что они отделяют лексемы. Обобщенные пробелы нужны, чтобы разделить стоящие рядом идентификаторы, служебные слова и константы.
Если входной поток разобран на лексемы до данного символа, то следующей лексемой считается лексема с максимально возможной длиной, которая начинается с этого символа.
R.2.2 Комментарии
Символы /* начинают комментарий, который завершается символами */. Такие комментарии не могут быть вложенными. Символы // начинают комментарий, который завершается концом этой строки. Символы //, /* и */ не имеют специального назначения в комментарии // и рассматриваются как обычные символы. Аналогично символы // и /* не имеют специального назначения внутри комментария /*.
R.2.3 Идентификаторы
Идентификатор — это последовательность букв и цифр произвольной длины. Первый символ должен быть буквой, символ подчеркивания _ считается буквой. Прописные и строчные буквы различаются. Все символы существенны.
R.2.4 Служебные слова
Перечисленные ниже идентификаторы фиксируются как служебные слова и в другом смысле не могут использоваться:
>asm continue float new signed try
>auto default for operator sizeof typedef
>break delete friend private static union
>case do goto protected struct unsigned
>catch double if public switch virtual
>char else inline register template void
>class enum int return this volatile
>const extern long short throw while
В дополнение к этому идентификаторы, содержащие двойное подчеркивание (__) резервируются для реализаций C++ и стандартных библиотек и пользователи не должны употреблять их.
В представлении программы на C++ в кодировке ASCII используются в качестве операций или разделителей следующие символы:
>! % ^ & * ( ) - + = {} | ~
>[ ] ; ': " ‹ › ? , . /
а следующие комбинации символов используются для задания операций:
>-› ++ -- .* -›* ‹‹ ›› ‹= ›= == != &&
>|| *= /= %= += -= ‹‹= ››= &= ^= |= ::
Каждая операция считается отдельной лексемой.
В дополнении к этому следующие символы резервируются для препроцессора:
># ##
Определенные, зависящие от реализации, свойства, такие как тип операции sizeof ($$R5.3.2) или диапазоны базовых типов (§R.3.6.1) определяются в стандартных заголовочных файлах (§R.16.4)
>‹float.h› ‹limits.h› ‹stddef.h›
Эти файлы являются частью ANSI стандарта для С. Кроме того заголовочные файлы
Еще от автора Бьерн Страуструп
Рекомендуем почитать