E__ строка литералов, представляющая дату трансляции в виде "Mmm dd yyyy" или "Mmm d yyyy", если число меньше 10, (здесь Mmm задает месяц, dd - день, а yyyy - год). __TIME__ строка литералов, представляющая время трансляции в виде "hh:mm:ss", (здесь hh задает часы, mm - минуты, а ss - секунды). Кроме того, считается определенным при трансляции программы на С++ макроимя __cplusplus. Перечисленные макроимена нельзя как переопределять, так и отменять их определения. Макроимена __LINE__ и __FILE__ можно определить с помощью команды #line ($$R.16.6). Определено ли макроимя __STDC, и если да, то каково его значение, зависит от реализации. R.17 Приложение A: Сводка грамматики Это приложение не относится к справочному руководству языка и не является определением конструкций C++. Она только должно служить более полному пониманию С++. Нельзя рассматривать его как точное определение языка, так как описанная здесь грамматика допускает произвольное множество конструкций, каждая из которых законна для С++. Чтобы различать выражения и описания, следует применять правила разрешения неопределенности ($$r.6.8, $$R.7.1, $$R.10.1.1). Далее, для отсеивания синтаксически правильных, но бессмысленных, конструкций следует применять правила контроля доступа, разрешения неопределенности и контроля типа. R.17.1 Служебные слова В описаниях: typedef ($$R.7.1.3), класса ($$R.9), перечисления ($$R.7.2), шаблона типа - ($$R.14) введены новые, зависящие от контекста, служебные слова, а именно: имя-класса: идентификатор имя-перечисления: идентификатор имя-typedef: идентификатор Отметим, что имя-typedef, обозначающее класс, является в то же время конструкцией имя-класса ($$R.9.1). R.17.2 Выражения выражение: выражение-присваивания выражение, выражение-присваивания выражение-присваивания: выражение-условия унарное-выражение операция-присваивания выражение-присваивания операция-присваивания: один из = *= /= %= += -= >>= <<= &= ^= |= выражение-условия: логическое-выражение-ИЛИ логическое-выражение-ИЛИ ? выражение : выражение-условия логическое-выражение-ИЛИ: логическое-выражение-И логическое-выражение-ИЛИ || логическое-выражение-И логическое-выражение-И: выражение-ИЛИ логическое-выражение-И && выражение-ИЛИ выражение-ИЛИ: выражение-исключающего-ИЛИ выражение-ИЛИ | выражение-исключающего-ИЛИ выражение-исключающего-ИЛИ: выражение-И выражение-исключающего-ИЛИ ^ выражение-И выражение-И: выражение-равенства выражение-И & выражение-равенства выражение-равенства: выражение-отношения выражение-равенства == выражение-отношения выражение-равенства != выражение-отношения выражение-отношения: сдвиговое-выражение выражение-отношения < сдвиговое-выражение выражение-отношения > сдвиговое-выражение выражение-отношения <= сдвиговое-выражение выражение-отношения >= сдвиговое-выражение сдвиговое-выражение: аддитивное-выражение сдвиговое-выражение << аддитивное выражение сдвиговое-выражение >> аддитивное выражение аддитивное-выражение: мультипликативное-выражение аддитивное выражение + мультипликативное-выражение аддитивное-выражение - мультипликативное-выражение мультипликативное-выражение: выражение-pm мультипликативное-выражение * выражение-pm мультипликативное-выражение / выражение-pm мультипликативное-выражение % выражение-pm выражение-pm: выражение-приведения выражение-pm .* выражение-приведения выражение-pm ->* выражение-приведения выражение-приведения: унарное-выражение ( имя-типа ) выражение-приведения унарное-выражение: постфиксное-выражение ++ унарное выражение -- унарное выражение унарная-операция выражение-приведения sizeof унарная-операция sizeof ( имя-типа ) выражение-размещения выражение-освобождения унарная-операция: один из * & + - ! ~ выражение-размещения: ::opt new параметры-new opt имя-типа-new инициализатор-new ::opt new параметры-new opt ( имя-типа ) инициализатор-new параметры-new: ( список-выражений ) имя-типа-new: список-спецификаций-типа описатель-new opt описатель-new: * список-спецификаций-cv opt описатель-new opt имя-класса :: список-спецификаций-cv opt описатель-new opt описатель-new opt [ выражение ] инициализатор-new: ( список-инициализаторов opt ) выражение-освобождения: ::opt delete выражение-приведения ::opt delete [] выражение-приведения постфиксное-выражение: первичное-выражение постфиксное-выражение [ выражение ] постфиксное-выражение ( список-выражений opt ) имя-простого-типа ( список-выражений opt ) постфиксное-выражение . имя постфиксное-выражение -> имя постфиксное-выражение ++ постфиксное-выражение -- список-выражений: выражение-присваивания список-выражений , выражение-присваивания первичное-выражение: литерал this :: идентификатор :: имя-функции-операции :: уточненное-имя ( выражение ) имя имя: идентификатор имя-функции-операции имя-функции-преобразования ~имя-класса уточненное-имя уточненное-имя: уточняющее-имя-класса :: имя литерал: целая константа символьная константа константа с плавающей точкой строка литералов R.17.3 Описания описания: спецификации-описания opt список-описателей opt ; описание-asm определение-функции спецификация-связи спецификация-описания: спецификация-класса-памяти спецификация-типа спецификация-fct спецификация-шаблона-типа friend typedef спецификации-описания: спецификации-описания opt спецификация-описания спецификация-класса-памяти: auto register static extern спецификация-fct: inline virtual спецификация-типа: имя-простого-типа спецификация-класса спецификация-перечисления спецификация-сложного-типа :: имя-класса const volatile имя-простого-типа: полное-имя-класса уточненное-имя-типа char short int long signed unsigned float double void спецификация-сложного-типа: служебное-слово-класса имя-класса служебное-слово-класса идентификатор служебное-слово-класса: class struct union уточненное-имя-типа: имя-typedef имя-класса :: уточненное-имя-типа полное-имя-класса: уточненное-имя-класса :: уточненное-имя-класса уточненное-имя-класса: имя-класса имя-класса :: уточненное-имя-класса имя-перечисления: идентификатор спецификация-перечисления: enum идентификатор opt { список-перечисления } список-перечисления: элемент-перечисления список-перечисления , элемент-перечисления элемент-перечисления: идентификатор идентификатор = выражение-константа спецификация-связи: extern строка-литерал { список-описаний opt } extern строка-литерал описание список-описаний: описание список-описаний описание описание-asm: asm ( строка-литерал) ; R.17.4 Описатели список-описаний: описатель-с-инициализатором список-описаний , описатель-с-инициализатором описатель-с-инициализатором: описатель инициализатор opt описатель: имя-в-описателе операция-ptr описатель описатель (список-описаний-параметров) список-спецификаций-cv opt описатель [ выражение-константа opt] ( описатель ) операция-ptr: * список-спецификаций-cv opt & список-спецификаций-cv opt полное-имя-класса :: * список-спецификаций-cv opt список-спецификаций-cv: const volatile имя-в-описателе: имя имя-класса ~имя-класса имя-typedef уточненное-имя-типа имя-типа: список-спецификаций-типа абстрактный-описатель opt список-спецификаций-типа: спецификация-типа список-спецификаций-типа абстрактный-описатель: операция-ptr абстрактный-описатель opt абстрактный-описатель opt ( список-описаний-параметров ) список-спецификаций_cv opt абстрактный-описатель opt [ выражение-константа opt ] ( абстрактный-описатель ) список-описаний-параметров: список-описаний-парам opt ... opt список-описаний-парам , ... список-описаний-парам: описание-параметра список-описаний-парам , описание-параметра описание-параметра: спецификации-описания описатель спецификации-описания описатель = выражение спецификации-описания абстрактный-описатель opt спецификации-описания абстрактный-описатель opt = выражение определение-функции: спецификации-описания opt описатель инициализатор-ctor тело-функции тело-функции: составной-оператор инициализатор: = выражение-присваивания = { список-инициализаторов , opt } ( список-выражений ) список-инициализаторов: выражение-присваивания список-инициализаторов , выражение-присваивания { список-инициализаторов , opt } R.17.5 Описания класса спецификация-класса: заголовок-класса { список-членов opt } заголовок-класса: служебное-слово-класса идентификатор opt спец-базовых opt служебное-слово-класса имя-класса спец-базовых opt служебное-слово-класса: class struct union список-членов: описание-члена список-членов opt спецификация-доступа : список-членов opt описание-члена: спецификации-описания opt список-описателей-членов opt ; определение-функции ; opt уточненное-имя ; список-описателей-членов: описатель-члена список-описателей-членов , описатель-члена описатель-члена: описатель спецификация-чистой opt идентификатор opt : выражение-константа спецификация-чистой: = 0 список-базовых: спецификация-базовых список-базовых , спецификация-базовых спецификация-базовых: полное-имя-класса virtual спецификация-доступа opt полное-имя-класса спецификация-доступа virtual opt полное-имя-класса спецификация-доступа: private protected public имя-функции-преобразования: operator имя-типа-преобразования имя-типа-преобразования: список-спецификаций-типа операция-ptr opt инициализатор-ctor: : список-инициализаторов-членов список-инициализаторов-членов: инициализатор-члена инициализатор-члена , список-инициализаторов-члена инициализатор-члена: полное-имя-класса ( список-выражений opt ) идентификатор имя-функции-оператор: operator операция операция: один из new delete + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- , ->* -> () [] R.17.6 Операторы оператор: помеченный-оператор оператор-выражение составной-оператор выбирающий-оператор оператор-цикла оператор-перехода оператор-описания помеченный-оператор: идентификатор : оператор case выражение-константа : оператор default : оператор оператор-выражение: выражение opt ; составной-оператор: { список-операторов opt } список-операторов: оператор список-операторов оператор выбирающий-оператор: if ( выражение ) оператор if ( выражение ) оператор else оператор switch ( выражение ) оператор оператор-цикла: while ( выражение ) оператор do оператор while (выражение) for ( оператор-иниц выражение opt ; выражение opt ) оператор оператор-иниц: оператор-выражение оператор-описание оператор-перехода: break ; continue ; return выражение opt ; goto идентификатор ; оператор-описания: описание R.17.7 Препроцессор #define идентификатор строка-лексем #define идентификатор ( идентификатор , ... , идентификатор ) строка-лексем #include "имяфайла" #include <имяфайла> #line константа "имяфайла" opt #undef идентификатор условное: часть-if части-elif opt часть-else opt строка-endif часть-if: строка-if текст строка-if: # if выражение-константа # ifdef идентификатор # ifndef идентификатор части-elif: строка-elif текст части-elif строка-elif текст строка-elif: # elif выражение-константа часть-else: строка-else текст строка-else: # else строка-endif: # endif R.17.8 Шаблоны типа описание-шаблона-типа: template < список-параметров-шаблона-типа> описание список-параметров-шаблона-типа: параметр-шаблона-типа список-параметров-шаблона-типа , параметр-шаблона-типа параметр-шаблона-типа: параметр-типа описание-параметра параметр-типа: class идентификатор имя-шаблонного-класса: имя-шаблона-типа < список-парам-шаблона-типа > список-парам-шаблона-типа: парам-шаблона-типа список-парам-шаблона-типа , парам-шаблона-типа парам-шаблона: выражение имя-типа R.17.9 Обработка особых ситуаций проверяемый-блок: try составной-оператор список-обработчиков список-обработчиков: обработчик список-обработчиков opt обработчик: catch ( описание-особой-ситуации ) составной-оператор описание-особой-ситуации: список-спецификаций-типа описатель список-спецификаций-типа абстрактный-описатель список-спецификаций-типа ... выражение-запуска: throw выражение opt спецификация-особой-ситуации: throw ( список-типа opt ) список-типа: имя-типа список-типа , имя-типа R.18 Приложение B: Совместимость Это приложение не относится к справочному руководству С++ и не является определением конструкций языка. Язык С++ основывается на С (описание в книге Кернигана и Ритчи, 78 г., дальше K&R) и включает большинство изменений, предложенных в ANSI стандарте для С. При конвертировании программ на языках С++, K&R C и ANSI C могут возникнуть трудности в связи с различным вычислением в них выражений. Транслятор должен распознавать все различия между С++ и ANSI C. Программы на С++ и ANSI C должны иметь одинаковый смысл за исключением трех следующих случаев: В языке С выражение sizeof('a') равно sizeof(int), а в С++ оно равно sizeof(char). Если есть описание enum e { A }; то sizeof(A) равно в С sizeof(int), тогда как в С++ оно равно sizeof(e) и не обязано быть равно sizeof(int). Имя структуры, описанной во внутреннем блоке, может скрывать имя объекта, функции, элемента перечисления или типа из внешнего блока. Приведем пример: int x[99]; void f() { struct x { int a; }; sizeof(x); /* для C это размер массива */ /* а для C++ размер структуры */ } R.18.1 Расширения В этом разделе перечисляются основные расширения языка С, введенные в С++. R.18.1.1 Возможности С++, введенные в 1985 г. Здесь перечисляются возможности, добавленные к С, версией языка С++ 1985 г. Можно указывать типы формальных параметров функции ($$R.8.2.5), и они будут проверяться ($$R.5.2.2). Будет происходить преобразование типа ($$R.5.2.2). Это есть и в ANSI C. В выражениях со значениями типа float вычисления могут проходить с обычной точностью ($$R.3.6.1 и $$R.4.3). Это есть и в ANSI C. Можно перегружать имена функций; $$R.13. Можно перегружать операции; $$R.13.4 Возможна реализация вызова функций подстановкой; $$R.7.1.2. Можно описывать объекты, представляющие данные, со спецификацией const; $$R.7.1.6. Это есть и в ANSI C. Можно описывать типа ссылки; $$R.8.2.2 и $$R.8.4.3. Возможно управление свободной памятью с помощью операций new и delete; $$R.5.3.3 и $$R.5.3.4. Введены классы, которые позволяют: скрывать информацию ($$R.11), проводить инициализацию ($$R.12.1), осуществлять пользовательские преобразования типа ($$R.12.3) и работать с динамическими типами с помощью виртуальных функций ($$R.10.2). Имя класса или перечисления считается именем типа; $$R.9. Указатель на любой объект c типом, не являющимся const или volatile, можно присвоить указателю типа void*. Это есть и в ANSI C. Указатель на функцию можно присваивать указателю типа void*; $$R.4.6. Описание внутри блока считается оператором; $$R.6.7. Можно описывать безымянные объединения; $$R.9.5. R.18.1.2 Возможности, добавленные в С++ после 1985 г. Здесь перечисляются основные расширения С++ после 1985 г.: Класс может иметь более одного прямого базового класса (множественное наследование); $$R.10.1. Члены класса могут быть защищенными; $$R.11. Операции new и delete можно описывать в классе и перегружать; $$r.5.3.3, $$R.5.3.4, $$R.12.5. Это позволило определенный способ управления памятью для класса с помощью "присваивания указателю this" отнести в раздел анахронизмов; $$R.18.3.3. Можно явно уничтожать объекты; $$R.12.4. Присваивания и инициализация для класса определены как присваивание и инициализация по членам; $$R.12.8. Служебное слово overload стало излишним и отнесено к разделу анахронизмов; $$R.18.3. Произвольные выражения разрешены в качестве инициализаторов статических объектов; $$R.8.4. Объекты, представляющие данные, могут быть volatile; $$R.7.1.6. Также и в ANSI C. Допустимы инициализаторы для статических членов класса; $$R.9.4. Функции-члены могут быть статическими; $$R.9.4. Функции-члены могут быть const или volatile; $$R.9.3.1. Можно явно указать связывание с подпрограммами на других языках; $$R.7.4. Можно перегружать операции ->, ->* и ` ; $$R.13.4. Классы могут быть абстрактными; $$R.10.3. Для пользовательских типов префиксные и постфиксные операции различаются. Шаблоны типов; $$R.14. Управление особыми ситуациями; $$R.15. R.18.2 С++ и ANSI C Вообще язык С++ обладает большими возможностями и налагает меньше ограничений, чем ANSI C, поэтому большинство конструкций ANSI C являются законными для С++, причем смысл их не меняется. Исключения сводится к следующему: Любая программа на ANSI C, использующая в качестве идентификаторов следующие служебные слова С++, не является программой на С++; $$R.2.4: asm catch class delete friend inline new operator private protected public template try this virtual throw Хотя это считается устаревшем в ANSI C, реализация С может налагать драконовские ограничения на длину идентификаторов; в реализациях С++ это недопустимо; $$R.2.3. В С++ функция должна быть описана прежде, чем ее можно вызвать; $$R.5.2.2. Описание f(); в С++ означает, что функция f не имеет параметров ($$R.8.2.5), а в С это означает, что f может иметь любое число параметров любого типа. Такое описание считается устаревшим в ANSI C. В ANSI C можно несколько раз описать без спецификации extern глобальный объект данных, в С++ возможно только одно его определение; $$R.3.3 В С++ класс не может иметь тоже имя, что и имя typedef, относящееся в той же области видимости к другому типу; $$R.9.1. В ANSI C операнд типа void* можно использовать в правой части присваивания, а также при инициализации переменной типа указателя на произвольный тип; в С++ это невозможно $$R.7.1.6. В ANSI C возможны команды переходов, обходящие инициализацию; в С++ это невозможно. В ANSI C по умолчанию глобальный объект типа const подлежит внешнему связыванию; для С++ это не так; $$R.3.3. Определения функций в "старом" стиле и вызовы неописанных функций считаются в С++ анахронизмами, которые не обязательно должны поддерживаться любой реализацией; $$R.18.3.1. В ANSI C они просто считаются устаревшими. В С++ структура (struct) образует область видимости ($$R.3.2); В ANSI C структура, перечисление или элемент перечисления, описанные в структуре поднимаются в область видимости самой структуры. Присваивание объекту типа перечисления значения, не принадлежащего перечислению, считается в С++ анахронизмом и не должно поддерживаться во всех реализациях; $$R.7.2. В ANSI C рекомендуется для таких присваиваний выдавать предупреждение. Строки, инициализирующие символьные массивы, не могут быть длиннее этих массивов; $$R.8.4.2. Тип символьной константы в С++ есть char ($$R.2.5.2) и int в ANSI C. Тип элемента перечисления есть тип этого перечисления в С++ ($$R.7.2) и тип int в ANSI C. Кроме того, стандарт ANSI для С допускает значительные различия в допустимых реализациях языка, что может привести к еще большим расхождениям между реализациями С++ и С. В частности, в некоторых реализациях С могут быть допустимы некоторые несовместимые описания. В С++ требуется совместимость даже для разных единиц трансляции; $$R.3.3. R.18.2.1 Как бороться с расхождениями В общем случае программа на С++ использует многие возможности, отсутствующие в ANSI C. Для такой программы незначительные расхождения, перечисленные в $$R.18.2, явно перекрываются расширениями в С++. Когда С++ и ANSI C должны иметь общие заголовочные файлы, нужно позаботиться, чтобы эти файлы представляли текст на общем подмножестве этих языков. Нельзя пользоваться специфическими возможностями С++ такими, как классы, перегрузка и т.п. Нельзя использовать одно имя для обозначения типа структуры и другого типа. Функцию без параметров следует описывать как f(void), а не просто f(). Глобальные объекты типа const следует явно специфицировать как static или extern. Для разделения частей программы на ANSI C и С++ можно использовать условную трансляцию с предописанным именем __cplusplus. Функции, которые могут вызываться из программ на обеих языках, должны быть явно описаны, как функции, подлежащие связыванию с С. R.18.3 Анахронизм Реализация С++ может включать перечисленные здесь расширения, чтобы облегчить использование программы на С, или чтобы упростить переход с более ранних версий С++. Отметим, что с каждым расширением связаны нежелательные последствия. Если реализация предоставляет такое расширение, то она должно также предоставлять возможность убедиться в отсутствии этих последствий для исходной программы. Реализация С++ не обязана обеспечивать эти расширения. При описании или определении функции можно использовать слово overload в конструкции спецификация-описания ($$R.7). Если оно используется в спецификации-описания, то считается служебным словом и его нельзя использовать как идентификатор. Определение статического члена класса, представляющего данные, для которого дана стандартная инициализация нулями ($$R.8.4, $$R.9.4), может быть опущено. Можно использовать команды препроцессора старого стиля (до ANSI C). Можно присваивать объекту типа перечисления значение типа int. При удалении массива, тип которого не имеет деструктора, можно указывать число элементов; $$R.5.3.4. Одна функция operator++() может использоваться для перегрузки как префиксных, так и постфиксных операций ++; тоже верно для операции --; $$R.13.4.6. R.18.3.1 Определения функций старого стиля Можно использовать синтаксис С для определений функций: старое-определение-функции: спецификации-описаний opt старый-описатель-функции список-описаний opt тело-функции старый-описатель-функции: описатель ( список-параметров opt ) список-параметров: идентификатор список-параметров , идентификатор Приведем пример: max(a,b) int b; { return (a<b) ? b : a; } Если определенная таким образом функция не была описана ранее, то тип ее формальных параметров полагается (...), т.е. он не будет проверяться. Если она была описана, то тип должен согласовываться с типом, указанным в описании. Приведенный синтаксис нельзя использовать для определения функций-членов. R.18.3.2 Старый стиль задания инициализатора базового класса В конструкции инициализатор-памяти ($$R.12.6.2) можно не указывать имя-класса, обозначающее базовый класс при условии, что существует только один прямой (непосредственный) базовый класс. Поэтому в описании class B { // ... public: B(int); }; class D : public B { // ... D(int i) : (i) { /* ... */ } }; будет вызываться конструктор B с параметром i. R.18.3.3 Присваивание указателю this Присваивая определенные значения указателю this, пользователь мог управлять выделением памяти для объекта некоторого класса. В конструкторе до использования членов класса можно было с помощью такого присваивания реализовать свой алгоритм выделения памяти. Присваивая в деструкторе указателю this нуль, можно было обойти стандартную операцию освобождения объектов класса. Кроме того, присваивание нуля в деструкторе отменяло неявные вызовы деструкторов для членов и базовых классов, например: class Z { int z[10]; Z() { this = my_allocator(sizeof(Z) ); } ~Z() { my_deallocator (this); this = 0; } }; Если выделение памяти уже произошло (как бывает для членов и объектов auto или static), то при входе в конструктор this имеет ненулевое значение и значение нуль в противном случае. Вызовы конструкторов для членов и базовых классов произойдут только после того, как this получил значение. Если в конструкторе базового класса есть присваивание this, то новое значение this будет использоваться и в конструкторах производных классов, если они есть. Отметим, что при наличии указанного анахронизма или тип указателя this не может быть *const, или нужно делать исключение для this из правила о присваивании указателям со спецификацией const. R.18.3.4 Приведение указателей на функцию-член Указатель на функцию-член некоторого объекта можно привести к указателю на какую-то другую функцию, например (int (*) ())p->f. Результирующий указатель будет настроен на функцию, вызов которой будет происходить с помощью обращения к этой функции-члену для того же объекта. Как обычно результат такого вызова считается неопределенным. R.18.3.5 Невложенность классов Если класс описан внутри другого класса и в программе больше не описано классов с этим именем, то его можно использовать, как если бы он был описан вне класса (так обстоит дело с описанием struct в С), например: struct S { struct T { int a; }; int b; }; struct T x; // означает `S::T x;' Список служебных слов auto автоматический break разрыв case вариант catch перехватить char символ class класс const конст continue продолжить default по умолчанию delete удалить do делать double двойной else иначе enum перечисление extern внешний float плавающий for для friend друг goto переход на if если inline подстановка int целый long длинный new новый operator оператор private частный protected защищенный public общий register регистровый return возврат short короткий signed знаковый sizeof размер static статический struct структура switch переключатель template шаблон типа this текущий throw запустить try проверить typedef тип union объединение unsigned беззнаковый virtual виртуальный void пустой volatile изменяемый while пока УКАЗАТЕЛЬ А абстрактный абстрактный класс абстрактный описатель абстрактный тип данных (АТД) абстракция абстракция данных абстракция данных или наследование автоматические агрегат Ада аддитивные операции адрес адрес битового поля адрес и присваивание адрес конструктора Алгол68 американский национальный институт стандартов (ANSI) анахронизм анализатор рекурсивного спуска арифметика беззнакового арифметика фиксированной точности арифметическая особая ситуация арифметические операции с указателем арифметические преобразования арифметический тип ассемблер асинхронные события ассоциативность операций ассоциативный массив ассоциативность операций Б базовый базовый класс безымянное объединение беззнаковая арифметика беззнаковая константа беззнаковый тип библиотека библиотека заголовочных файлов битовое поле блок блокирование (замок) буферизация ввода-вывода В ввод встроенных типов ввод и вывод ввод пользовательских типов ввод-вывод виртуальный базовый класс виртуальный деструктор виртуальный конструктор виртуальная функция включаемый файл включение исходного файла внешнее связывание внутреннее связывание внутренняя структура вложенный класс возврат каретки возвращаемое функцией значение восьмеричная константа восьмеричное число время жизни объекта встроенный встроенная операция встроенный (основной) тип выбор члена класса вывод встроенных типов вывод пользовательских типов выделение пробелами вызов вызов виртуальной функции вызов деструктора вызов операторной функции вызов по значению вызов по ссылке вызов функции выравнивание выравнивание битового поля выравнивание класса выравнивание члена класса выражение выражение-запуска выражение константа выражение-константа выражение-отношения выражение присваивания выражение-приведения выражение-присваивания выражение-сдвига выражение-размещения вычисление стандартного параметра вычитание указателей Г гибридный проект глобальная область видимости глобальная область видимости глобальное безымянное объединение глобальное имя глобальное имя глобальные данные глобальные объекты глубокое копирование горизонтальная табуляция \t группирование особых ситуаций Д данные двойная кавычка десятичная константа деструктор деструктор временного объекта деструктор локального объекта деструктор объединения деструктор производного класса динамическая инициализация динамическая информация о типе динамический контроль типов динамическая ошибка длина имени доступ доступ к базовому классу доступ к виртуальной функции доступ к защищенному члену доступ к имени члена доступ к члену базового класса доступ к члену класса дружественный класс дружественная функция доступ к виртуальной функции Е единица трансляции З завершение программы заголовочный файл загрузчик закрытие потока запрос ресурса запуск особой ситуации запуск программы зарезервированный идентификатор защищенный член знаковый тип И идентификатор иерархия классов иерархия особых ситуаций иерархия объектов изменяемый адрес имя имя класса имя-класса имя перегруженного члена имя перегруженной функции имя-простого-типа имя-шаблонного-класса имя-функции-преобразования инициализатор инициализация инициализация автоматических инициализация базового класса инициализация библиотеки инициализация и присваивание инициализация массива инициализация массива объектов класса инициализация массива символов инициализация объединения инициализация объекта класса инициализация объекта-члена инициализация регистра инициализации ссылки инициализация структуры инициализация члена инициализация члена класса инкапсуляция интерфейс интерфейс класса интерфейсный класс исходный файл исчерпание свободной памяти исчерпание ресурса исчерпание свободной памяти итерация К каркас области приложения класс класс и тип класс или объединение класс или структура класс особой ситуации класс памяти auto Кобол комментарий конец строки \n конкатенация строк конкретный тип конкретный тип данных (КТД) константа константа double константа float константа long константа long double константа unsigned константа перечисления константа пользовательского типа константа с плавающей точкой константа строка конструктор конструктор временного объекта конструктор глобальной переменной конструктор и абстрактный класс конструктор копирования конструктор локального объекта конструктор локальной переменной конструктор объединения конструктор переменной из свободной памяти конструктор производного класса конструктор члена класса конструктор членов массива контролируемое объединение контроль диапазона контроль доступа контроль типов параметров функции копирование косвенность (косвенное обращение) косвенный базовый класс Л лексема лексические соглашения Лисп литерал литеральные константы логическая операция локальная область видимости М макрокоманда макрокоманда препроцессора макрокоманда error макрокоманда null макрокоманда pragma макрообработка макроопределение макроподстановка макроподстановка (подстановка) манипулятор массив метка метка case метка default механизм вызова функции метод проектирования многомерный массив многосимвольная константа многоуровневая обработка ошибок множество символов ASCII множество символов EBCDIC множественное наследование модель каскад модульное программирование модульность мультипликативное-выражение Н направленный ацикличный граф наследование наследование деструктора наследование интерфейса наследование конструктора неоднозначное преобразование типа неоднозначность неоднозначность преобразования класса неожиданные особые ситуации неописанный параметр неперехваченная особая ситуация неопределенный параметр конструктора неявный вызов деструктор неявное преобразование неявное преобразование типа неявное пользовательское преобразование О обобщенный пробел объединение область видимости область видимости friend область видимости вложенного класса область видимости имени область видимости класса область видимости локального класса область видимости макроимени область видимости макроопределения область видимости метки область видимости функции область видимости стандартного параметра обработка ошибок обработчик особой ситуации обратная дробная черта \ обратный вызов обширный интерфейс общий член класса объект объект-функция объектно-ориентированное программирование одиночная кавычка окружение программы операнд const операнд volatile операнд ссылка оператор оператор break оператор continue оператор do оператор for оператор goto оператор if оператор return оператор switch (переключатель) оператор while оператор выражения оператор итерации оператор описания оператор перехода оператор цикла оператор-выражение оператор-описание оператор-перехода операторная функция (operator) операционная система UNIX операция ! операция # операция ## операция %= операция && операция &= операция *= операция ++ операция += операция , операция -- операция -= операция /= операция :: операция <<= операция >>= операция ^= операция больше или равно операция больше чем операция ввода >> операция взятия адреса операция выбора члена класса операция вывода << операция вызова функции операция декремент операция запятая операция индексации операция инкремент операция косвенности операция логического отрицания операция логическое И операция логическое ИЛИ операция меньше или равно операция меньше чем операция неравно операция отношения операция преобразования операция приведения операция равенства операция присваивания операция-присваивания операция разрешения области видимости операция сдвига влево операция сложения операция условия ( ? : ) операция умножения операция унарный минус операция delete операция new операция sizeof описание описание asm описание extern описание friend описание register описание typedef описание битового поля описание в качестве определения описание внешних описание вложенного класса описание доступа описание дружественного класса описание или определение описание имени описание имени класса описание класса описание класса памяти описание локального класса описание массива описание параметра описание постоянного указателя описание ссылки описание статического члена описание стандартного параметра описание статического члена описание типа описание указателя описание функции описание функции-члена описание члена описание члена класса описание шаблона типа описание-шаблона-типа описание шаблонного класса описание шаблонной функции описание эллипсиса в функции описание-особой-ситуации описание-параметра описатель описатель-члена определение определение виртуальной функции определение класса определение конструктора определение области видимости функции определение объекта определение статического члена определение функции определение-функции определение функции-члена определение функции-члена inline определение шаблонного класса определение шаблонной функции определение чисто виртуальной функции определение члена определение шаблонного класса определение шаблонной функции определение элемента перечисления особая ситуация освобождение ресурса основной тип отладка отличия от вычисления выражений в С отличия от области видимости С отличия от описания функции в С отличия от пространства именования С отличия от связывания в С ошибка связывания П память для класса память для массива парадигма программирования параметр параметры командной строки параметр функции парам-шаблона-типа параметр-шаблона-типа первичное выражение перевод формата \f перегрузка перегрузка бинарной операции перегрузка декремента перегрузка и доступ перегрузка и область видимости перегрузка и ссылка перегрузка имени функции перегрузка имени члена перегрузка индексации перегрузка инкремента перегрузка операции перегрузка операции выбора члена перегрузка операции вызова перегрузка операции присваивания перегрузка унарной операции передача параметра функции переопределение виртуальной функции переполнение перехватить (особую ситуацию) перечисление побочные эффекты поверхностное копирование повторный запуск (особой ситуации) поддержка абстракции данных поддержка объектно-ориентированного программирования поле полное-имя-класса пользовательская операция пользовательская операция *= пользовательская операция + пользовательская операция ++ пользовательская операция - пользовательская операция -- пользовательская операция -> пользовательская операция = пользовательская операция индексации пользовательский тип пользовател