Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 202
Текст из файла (страница 202)
Например, счетчик реального времени можно объявить так: ех1егп сопят ио(аГгце!опу с1оси; Два последовательных считывания счосй могуг дать разные результаты. А.8. Классы См. главу 10. илчя-класса: иденппчфикатор идентификатор-шаблона спецификатор-класси: заголовок-класси (спецификация- членов, Э заголовок-класса: ключевое-слово-класса идентификшпор, конструкция-базы ключевое-гэгов о-класса свеч учфика тор-еложенногогилсени иден гпифччка спор конструкция-базы„в ключевое-слово-клпсса спецификатор-вложенного-имени „, иденпшфикатор-шаолона конапрукция-базы „ Приложение А.
Грамматика 886 ключевое-слово-класст сгазз 51УО с1 ипиэп спецификация-члена: объявление-члена спецификация-членап, спецификатор-досгпупа г спег1ификация -членаы, объявление-члена: поогедоватегьносгпь-спецификаторов-обълвлений„н список-объявителей-членовы,, определение-функгуш;„,„ ::„„, спецификатор-вложенного-плени 1етрга1е„;г неквалифицированньш-идентификатор; ионну-объявление объявление -игабл онп список-ооъявителеи- гленов: объявшпель-члена список-объявителеи'-членов, обил випгель- глена ооьявитель- глени: объявитель спецификагпор-чистоты„„ объявитель консгпангпныгнинггциалггзагпорт идентификатор„„,; консгпангпное-вьгражение сггецифггкагпор-чггсгггогггы: =О константный-инициализаторг = константное-выражение Чтобы сохранить совместимость с С, в одной области видимости 8 5.7) могут быть' объявлены класс и не-класс с одинаковымн именами. Например: з1гис1 з 1а1 1 гг' ...
'гг 1' ! п1 з 1п1 ~сггаг' пате, з 1ги с1 з 1а1" уцЯ, В этом случае простое имя (з1а1) — это имя не-класса. На класс надо ссылаться с использованием префикса ключевое-слово-класса. Константные выражения определены в у В.5. А.8.1. Производные классы См. главы 12 и 15. консгирукыгя=оазмг : сггисок-спецификаторов-баз список-специфпкаторов-баз: спецафикатор-базы список-спецификаторов-баз, спецификатор-базы спецификагпор-бпзыг ичкспецификатор-вложенного-ииениьк илгя-класса А.9. Шаблоны Иг!ио! спецпфикатор-доступа,,;:„„, спецификатор-влоэкенного-ил!ение, ил!я-класса специфпкатор-досгпупауНоо(нпл, спецификатор-вложенного-ичением илт - класса А.8.2. Особые функции-члены Сьь ф 11А (опсраторы преобразования), й 10.4.6 (инициализация членов класса) и з 12,2.2 (инициализация подобъсктов базовых классов). иденплификатор функции-преобразования; араго!ог иденкпификатор-преобризования-!пипа идентификатор-преобразования-типа: последоеагпельность-спецофикаторов-птпа объявитель-преобразовиния„н объявитель-преобразовпния: ргг-оператор объявитель-преобразоавния„м с!ог-онициализатор; : список-инициализаторов-памяти список-инициализаторов-палттиг инициалпзатор- пичяти инициализатор-памяти, список-инициализаторов-палгяти инициализа тор-памяти; идентофикатор-инициализатора-палгятп [спасал!-внражений.
) идентификатор-инициализатора-памяти: ,спецификатор-вложенного-имени„„,плт-клиссп идентификатор идентофпкатор-функции-оператора; ор его!ог оператор < > « «= А.9. Шаблоны Шаблоны обьясняются в главе 13 и з 8.13. оаъявлгенг~е-гиаблона; ехрогз„н !етр!оге < список-параметров-шаолпна > объявление специфика!пор-доступи: рг!чо!е рго!ес!ес) ро!зцс А.8.3. Перегрузка См.
главу 11. оператор: одно из пеуг гле!е!е * пеуг[) / * / >= ЬЬ с!е!е!еЦ ь/ сь ь ь ++ ! » »= [) Приложение А. Грамматика 888 сп»шок-поранен»ров-шаблона: параметр-шаблона список-паралетров-шаблона, ппралетр-»па»иона пирплетр-шаблона: парол»етр-тип оотпвление-паранетра парол»етр-тип: с)О55 иденпюф»»кп»поря» с)озз идентификатор,, = иденти4»икатор-тини '»уреооте идентификатор.„н )урепоте идетпификатор„„, = пденпшфикшпор-типа »'от р)о»е < список-паранетров-шаблона > с)озв адепт ификпторо, »етр)о»е < список-пара»штроп-и»адлони > с)озз»»дентиф»»ка»поре, = идентпфика»пор-выраскение иденпшфикатор-шпблона» »от-шаблона < список-аргул»ентов-шаолона„н > и»»я-»иаблоии: иденпшфикатор список-аргу»»ентов-»иаолона: аргул»ен»»»-»иайлона ст»сок-аргул»ентов-шаалона, аргул»ен»п-»иай»онп аргу»»евт-»ипдлона: вырилсение-присваивания иденпшфикатор-типа пдетпификатор-выражение явное-»тстатуированпе: »иаблон обьлвление пенал-специилпзац»т: )етр)о»е < > оовявление Явная специализация ар»умента шаблона открывает возможность для завуалирован- ной синтаксической двусмысленности.
Рассмотрим пример: оо»06 )) Е' з<1>)0); О неоднознанность: (О) <1) >(О) пли ((<(>) (О)? »»»» разрешение: вызь»вава»ся)<) > с аргунентол» 0 Разрешенце просто и эффективно: если(' — имя шаблона, то)< — начало квалифицированного имени шаблона, и цослелующие токены должны интерпретироваться с учетом этого; в противном случае < означает знак «меньше>. Аналогично, первый невложенньш знак > заканчивает список аргументов шаблона. Гели требуется знак «болыце», нужно использовать скобки: »<<а>6>)0), »»»» сантакс»шеская ош»»ока ) <)а>6)>)0), »»»' правильно Подобная же лексическая двусмысленность возникает, когда завершающие знаки > оказываются слишком близко друг к другу.
Например; 889 А.11. Директивы препроцессора // гинпгаксическгчя оишбка: неожпда нный» // 1сдвиг вправо) // правильно: список векторов 1а1<иесгог.<1пг»Ь1; Йьг< иес1ог<1п1»Ь2; Пробел между лвумя > забывать нельзя; » — зто оператор сдвига вправо. Это в са- мом деле может доставить неприятности. А.10. Обработка исключений См.
9 8.3 и главу 14. олок-1гу: 1гу составная-инспгрукция последовательность-обрабогпчиков ггу-блок-функции; 1гу с1ог-инициализатор„п тело-функции последовательность-обработчиков последовательность-обраоот юков: обрабопгчик последовагпельносгпь-обработчиков„„ обработчик: саЕсгс ~ объявление-исключения ~ составная-инструкг1ия объявление-исключения: последовательноспгь-гпецифггкаторов-типа объявитель последовательность-спецификаторов-типа абстрактный-объявсопель последовагпельность-спецпфпкаторов-типа выраясение-Ягогиг Изгои вьгриженьге-присвагьванияч,, спецификиция-исключения: 1Ьгочг ~ список-иденгпификаторов-типа,, ) список-идентификаторов-типа: идеюпификатор-типа список-идентификаторов-типа, иденпгификатор-типа А.11.
Директивы препроцессора Всг директивы препроцессора начинаются с символа №, который должен быть пер- вым символом-не-раздслителем в данной строке. Препроцессор — это относительно простой обработчьпс макросов, работающий в основном с лексическими токенами, а не с отлельными символами. В дополнение к возможности определять и использовать макросы Я 7.8), препроцессор предоставляет механизмы для включения текстовых и стандартных заголовочных файлов (9 9.2.1), а также для условной компиляции, основываясь на макросах Я 9.3.3). Например: №у'ОРТ==4 № Ь с1ис1е '6еадег4.6' №еЦО<ОРТ №тс!иде "воте1геадег.1г №е1ве №1пс1иде<свЫ118> №епдь/ 890 Приложение А.
Грамматика файл-препроуессора: группо... группа: часть-груп ы группа часть-группы часть-группы: рр-токены„„, перевод-строки фрагмент-сЗ управляюцая-строка фрагменгп-срг группа-у группьоефы, групгза-еЬе„„, строка-епйгт группан б № О константное-выражение перевод-строки группаем № аое1 идентификатор перевод-строки группа„„, № Ие1 идентификатор перевод-строка группа,„, группы-е!й: гругзпгз-еЩ группы-еЦгруппа-еф группа- е1г б № еИ константное-выражение перевод-сгггроки группа, группа-ейзе: № еЬе перевод-сгпроки группа„„, спсрока-епйг~: зг епсй перевод-строки управляющая-строка; № ьпс~огзе рр-токены перевод-строки зг бейле идентификатор список-подстановок перевод-гтроки № гзейпе идентификатор левая-скобка список-идентификаторов„„, ~ список-подстановок перевод-строки № опием идентификатор переводыппроки № 'зпе рр-гпокеньс перевод-строки № епог рр-токены„н перевод-сгпроки № ргаугпа рр-токены,„перевод-строки № перевод-строки левая-скобка: символ левой круглой скобки без символа-разделителя перед ней список- подспга нов ок; рр-токены, рр-токеныг пзокен-препроцессора рр-токены гпокен-препроуессора перевод-строки.
силгвол перевода строки список-идентьфикиторов; идентификатор список-идентификаторов, идентификатор Приложение Б Совместимость Вгв продолжайте следовать своим обычаям, а я буду следовать своилс — Ч. Оэпьвр Совместимость С/С«« — «тихие различия между С и С++ — код на С, не являющийся кодом на С++ — нежелательные особенности -- код на С++, не являющийся кодом на С вЂ” устаревшие реализапни С++ — заголовочные файлы -- стандартная библиотека — пространства имен — ошибки распределения памяти — шаблоны — инициализаторыуог-инструкции. Б.1.