список_описаний_прм :
список_описаний_прм , описание_параметра
описание_параметра
описание_параметра:
спецификаторы_описания описатель
спецификаторы_описания описатель = константное_выражение
спецификатор_класса:
заголовок_класса {список_членов opt }
заголовок_класса {список_членов opt public :
список_членов opt }
заголовок_класса :
агрег идентификатор opt
агрег идентификатор opt : public opt typedef-имя
список_членов :
описание_члена список_членов opt
описание_члена:
спецификаторы_описания opt описатель_члена ;
описатель_члена:
описатель
идентификатор opt : константное_выражение
инициализатор:
= выражение
= { список_инициализаторов}
= { список_инициализаторов, }
(список_выражений )
список_инициализаторов :
выражение
список_инициализаторов , список_инициализаторов
{ список_инициализаторов }
enum-спецификатор:
enum идентификатор opt { enum-список }
enum-список:
перечислитель
enum-список , перечислитель
перечислитель:
идентификатор
идентификатор = константное_выражение
18.3 Операторы
составной_оператор:
{ список_описаний opt список_операторов opt }
список_описаний:
описание
описание список_описаний
список_операторов:
оператор
оператор список_операторов
оператор:
выражение ;
if ( выражение ) оператор
if ( выражение ) оператор else оператор
while ( выражение ) оператор
- стр 315 -
do оператор while ( выражение ) ;
for ( выражение opt ; выражение opt ; выражение opt )
оператор
switch ( выражение ) оператор
case константное выражение : оператор
default : оператор
break;
continue;
return выражение opt ;
goto идентификатор ;
идентификатор : оператор
delete выражение ;
asm ( строка ) ;
;
18.4 Внешние определения
программа:
внешнее_определение
внешнее_определение программа
внешнее_определение:
определение_функции
описание
определение_функции:
спецификаторы_описания opt описатель_функции
инициализатор_базового_класса opt тело_функции
описатель_функции:
описатель ( список_описаний_параметров)
тело_функции:
составной_оператор
инициализатор_базового_класса:
: ( список_параметров opt )
18.5 Препроцессор
#define идент строка_символов
#define идент( идент,...,идент ) строка символов
#else
#endif
#if выражение
#ifdef идент
#ifndef идент
#include "имя_файла"
#include <имя_файла>
#line константа "имя_файла"
#undef идент
- стр 316 -
19. ОТЛИЧИЯ ОТ "СТАРОГО C"
19.1 Расширения
Типы параметров функции могут быть заданы (#8.4) и будут
проверяться (#7.1). Могут выполняться преобразования типов.
Для выражений с числами с плавающей точкой может использоваться
плавающая арифметика одинарной точности; #6.2.
Имена функций могут быть перегружены; #8.6
Операции могут быть перегружены; 7.16, #8.5.10.
Может осуществляться inline-подстановка функций; #8.1.
Объекты данных могут быть константными (const); #8.3.
Могут быть описаны объекты ссылочного типа; #8.3, #8.6.3
Операции new и delete обеспечивают свободное хранение в памяти;
#17.
Класс может обеспечивать скрытые данные (#8.5.8), гарантированную
инициализацию (#8.6.2), оперделяемые пользователем преобразвания
(#8.5.6), и динамическое задание типов через использование
виртуальных функций (#8.5.4).
Имя класса является именем типа; #8.5.
Любой указатель может присваиваться [указателю] void* без
приведения типов; #7.14.