Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Эквивалентность операций, применяемых к основным типам (например, ++a эквивалентно a+=1), не обязательно выполняется для операций, применяемых к классовым типам. Некоторые оперции, например, присваивание, в случае применения к основным типам требуют, чтобы операнд был lvalue; это не требуется для операций, описанных для классовых типов.

7.16.1 Унарные операции

Унарная операция, префиксная или постфиксная, может быть определена или с помощью функции члена (см. #8.5.4), не получающей параметров, или с помощью функции друга (см. #8.5.10), получающей один

параметр, но не двумя способами одновременно. Так, для любой унарной операции @, x@ и @x могут интерпретроваться как x.операция@ или операция@(x). При перегрузке операций ++ и – невозможно различить префиксное и постфикное использование.

7.16.2 Бинарные операции

Бинарная операция может быть определена или с помощью функции члена (см. #8.5.4), получающей один параметр, или с помощью функции друга (см. #8.5.9), получающей два параметра, но не двумя способами одновременно. Так, для любой бинарной операции @, x@y может быть проинтерпретировано как x.operator @(y) или operator@(x,y).

7.16.3 Особые операции

Вызов функции первичное_выражение ( список_выражений opt )

и индексирование

первичное_выражение [ выражение ]

считаются бинарными операциями. Именами определяющей функции являются соответсвенно operator и operator[]. Обрщение x(arg) интерпретируется как x.operator(arg) для класового объекта x. Индексирование x[y] интерпретируется как x. operator[](y).

8. Описания

Описания используются для определения интерпретации, дваемой каждому идентификатору. Они не обязательно резервируют память, связанную с идентификатором. Описания имеют вид:

описание: спецификаторы_описания opt список_описателей opt ; описание_имени asm_описание

Описатели в списке_описателей содержат идентификаторы, подлежащие описанию. Спецификаторы_описания могут быть опущны только в определениях внешних функций (#10) или в описанях внешних функций. Список описателей может быть пустым толко при описании класса (#8.5) или перечисления (#8.10), то есть, когда спецификаторы_описания – это class_спецификатор или enum_спецификатор. Описания имен описываются в #8.8; опсания asm описаны в #8.11.

спецификатор_описания: спецификатор_класса_памяти спецификатор_типа спецификатор_функции friend typedef

спецификаторы_описания: спецификатор_описания спецификатор_описания opt

Список должен быть внутренне непротиворечив в описывамом ниже смысле.

8.1 Спецификаторы класса памяти

Спецификаторы – это:

спецификатор_класса_памяти: auto static extern register

Описания, использующие спецификаторы auto, static и register также служат определениями тем, что они вызывают рзервирование соответствующего объема памяти. Если описание extern не является определением (#4.2), то где-то еще должно быть определение для данных идентификаторов.

Описание register лучше всего представить как описание auto (автоматический) с подсказкой компилятору, что описанные переменные усиленно используются. Подсказка может быть проинорирована. К ним не может применяться операция получения ареса amp;.

Спецификаторы auto или register могут применяться только к именам, описанным в блоке, или к формальным параметрам. Внутри блока не может быть

описаний ни статических функций, ни статических формальных параметров.

В описании может быть задан максимум один sc_спецификтор. Если в описании отсутсвует спецификатор_класса_памяти, то класс памяти принимается автоматическим внутри функции и статическим вне. Исключение: функции не могут быть автоматческими.

Спецификаторы static и extern могут использоваться толко для имен объектов и функций.

Некоторые спецификаторы могут использоваться только в описаниях функций:

спецификатор_функции: overload inline virtual

Спецификатор перегрузки overload делает возможным ипользование одного имени для обозначения нескольких функций, см. #8.9.

Спецификатор inline является только подсказкой компилтору, не влияет на смысл программы и может быть проигнорирван. Он используется, чтобы указать на то, что при вызове функции inline-подстановка тела функции предпочтительнее обычной реализацци вызова функции. Функция (#8.5.2 и #8.5.10), определенная внутри описания класса, является inline по умолчанию.

Спецификатор virtual может использоваться только в опсаниях членов класса, см. #8.5.4.

Спецификатор friend используется для отмены правил сорытия имени для членов класса и может использоваться только внутри описаний классов, см. #8.5.9.

С помощью спецификатора typedef вводится имя для типа, см. #8.8.

8.2 Спецификаторы типа

Спецификаторами типов (спецификатор_типа) являются:

спецификатор_типа:

простое_имя_типа спецификатор_класса enum-спецификатор сложный_спецификатор_типа const

Слово const можно добавлять к любому допустимому спецфикатору_типа. В остальных случаях в описании может быть дано не более одного спецификатора_типа. Объект типа const не яляется lvalue. Если в описании опущен спецификатор типа, он принимается int.

простое_имя_типа: char short int long unsigned float double const void

Слова long, short и unsigned можно рассматривать как прилагательные. Они могут применяться к типу int; unsigned может также применяться к типам char, short и long.

Спецификаторы класса и перечисления обсуждаются в #8.5 и #8.10 соответственно.

сложный_спецификатор_типа: ключ typedef-имя ключ идентификатор

ключ: class struct union enum

Сложный спецификатор типа можно использовать для ссылки на имя класса или перечисления там, где имя может быть скрыто локальным именем. Например:

class x (* ... *);

void f(int x) (* class x a; // ... *)

Если имя класса или перечисления ранее описано не было, сложный_спецификатор_типа работает как описание_имени, см. #8.8.

8.3 Описатели

Список_описателей, появляющийся в описании, есть раздленная запятыми последовательность описателей, каждый из кторых может иметь инициализатор.

список_описателей: иниц_описатель иниц_описатель , список_описателей

иниц_описатель:

описатель инициализатор opt

Инициализаторы обсуждаются в #8.6. Спецификатор в описнии указывает тип и класс памяти объектов, к которым относятся описатели. Описатели имеют синтаксис:

описатель: оп_имя ( описатель ) * const opt описатель amp; const opt описатель описатель ( список_описаний_параметров ) описатель [ константное_выражение opt ]

Поделиться:
Популярные книги

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Страж Кодекса. Книга II

Романов Илья Николаевич
2. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга II

Потомок бога 3

Решетов Евгений Валерьевич
3. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Потомок бога 3

Небо в огне. Штурмовик из будущего

Политов Дмитрий Валерьевич
Военно-историческая фантастика
Фантастика:
боевая фантастика
7.42
рейтинг книги
Небо в огне. Штурмовик из будущего

Внебрачный сын Миллиардера

Громова Арина
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Внебрачный сын Миллиардера

Семь Нагибов на версту

Машуков Тимур
1. Семь, загибов на версту
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Семь Нагибов на версту

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Кодекс Охотника. Книга VIII

Винокуров Юрий
8. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VIII

Его темная целительница

Крааш Кира
2. Любовь среди туманов
Фантастика:
фэнтези
5.75
рейтинг книги
Его темная целительница

Наследница долины Рейн

Арниева Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Наследница долины Рейн

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Честное пионерское! 2

Федин Андрей Анатольевич
2. Честное пионерское!
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Честное пионерское! 2

Кодекс Охотника. Книга VII

Винокуров Юрий
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75
рейтинг книги
Кодекс Охотника. Книга VII