== != amp; ^ ! amp; amp; !! операция_присваивания
операция_присваивания: одна из = += -= *= /= %= ^= amp;= != »»= ««=
унарная_операция: одна из * amp; + – ~ ! ++ –
специальная_операция: одна из []
операция_свободной_памяти: одна из new delete
имя_типа: спецификаторы_описания абстрактный_описатель
абстрактный_описатель: пустой * абстрактный_описатель абстрактный_описатель ( список_описаний_параметров ) абстрактный_описатель [ константное_выражение opt ]
простое_имя_типа: typedef-имя char short int long unsigned float double void
typedef-имя: идентификатор
14.2 Описания
описание: спецификаторы_описания opt список_описателей opt ; описание_имени asm-описание
описание_имени: сост идентификатор ; enum идентификатор ;
сост:
class struct union
asm-описание: asm ( строка ) ;
спецификаторы_описания: спецификатор_описания спецификаторы_описания opt
спецификатор_описания: спецификатор_класса_памяти спецификатор_типа спецификатор_функции typedef friend
спецификатор_типа: простое_имя_типа спецификатор_класса спецификатор_enum усложненный_спецификатор_типа const
спецификатор_класса_памяти: auto extern register static
спецификатор_функции: inline overload virtual
усложненный_спецификатор_типа: ключ typedef-имя ключ идентификатор
ключ: class struct union enum
список_описателей: иниц-описатель иниц-описатель , список_описателей
иниц-описатель: описатель инициализатор opt
описатель: оп_имя ( описатель ) * const opt описатель amp; const opt описатель
описатель ( список_описаний_параметров ) описатель [ константное_выражение opt ]
оп_имя: простое_оп_имя typedef-имя :: простое_оп_имя
простое_оп_имя: идентификатор typedef-имя ~ typedef-имя имя_функции_операции имя_функции_преобразования
имя_функции_операции: operator операция
имя_функции_преобразования operator тип
список_описаний_параметров: список_описаний_прм opt ... opt
список_описаний_прм: список_описаний_прм , описание_параметра описание_параметра
описание_параметра: спецификаторы_описания описатель = выражение спецификаторы_описания описатель = константное_выражение спецификаторы_описания абстракт_описатель = выражение спецификаторы_описания абстракт_описатель = выражение
спецификатор_класса: заголовок_класса (* список_членов opt *) заголовок_класса (* список_членов opt public : список_членов opt *)
заголовок_класса: сост идентификатор opt сост идентификатор opt : public opt typedef-имя
список_членов: описание_члена список_членов opt
описание_члена: спецификаторы_описания opt описатель_члена инициализатор opt ; определение_функции opt
описатель_члена: описатель идентификатор opt : константное_выражение
инициализатор: = выражение = (* список_инициализаторов *) = (* список_инициализаторов , *) ( список_выражений )
список_инициализаторов: выражение список_инициализаторов , список_инициализаторов (* список_инициализаторов *)
спецификатор_enum: enum идентификатор opt (* enum-список *)
enum-список: перечислитель enum-список , перечислитель
перечислитель: идентификатор идентификатор = константное_выражение
14.3 Операторы
составной_оператор: (* список_операторов opt *)
список_операторов: оператор оператор список_операторов
оператор: описание составной_оператор выражение opt ; if ( выражение ) оператор if ( выражение ) оператор else оператор while ( выражение ) оператор do оператор while ( выражение ) ; for ( оператор выражение opt ; выражение opt ) оператор switch ( выражение ) оператор case константное_выражение : оператор default : оператор break ; continue ; return выражение opt ; goto идентификатор ; идентификатор : оператор
14.4 Внешние определения
программа: внешнее_определение внешнее_определение программа
внешнее_определение: определение_функции описание
определение_функции: спецификаторы_описания opt описатель_функции инициализатор_базового opt тело_функции
описатель_функции: описатель ( список_описаний_параметров )
тело_функции: составной_оператор
инициализатор_базового: : ( список_инициализаторов_членов opt )
14.5 Препроцессор
#define идентификатор строка_лексем
#define идентификатор( идентификатор,...,идентификатор ) строка лексем #else #endif #if выражение #ifdef идентификатор #ifndef идентификатор #include «имя_файла» #include «имя_файла» #line константа «имя_файла» #undef идентификатор
15. Отличия от C
15.1 Расширения
Типы параметров функции могут быть заданы (#8.4) и будут проверяться (#7.1). Могут выполняться преобразования типов (# 7.1).
Для выражений с числами с плавающей точкой может исползоваться плавающая арифметика одинарной точности; #6.2.
Имена функций могут быть перегружены; #8.9.
Операции могут быть перегружены; 7.16, #8.5.11.
Функции могут быть inline-подставляемыми; #8.1.
Объекты данных могут быть константными (const); #8.3.
Могут быть описаны объекты ссылочного типа; #8.4, #8.6.3
Операции new и delete обеспечивают свободное хранение в памяти, #7.2.