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

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

Жанры

Шрифт:

6.7 Преобразования указателей

Везде, где указатели присваиваются, инициализируются, сравниваются и т.д. могут выполняться следующие преобразовния.

Константа 0 может преобразовываться в указатель, и грантируется, что это значение породит указатель, отлиный от указателя на любой объект.

Указатель любого типа может преобразовываться в void*.

Указатель на класс может преобразовываться в указатель на открытый базовый класс этого класса, см. #8.5.3.

Имя вектора может преобразовываться в указатель на его первый элемент.

Идентификатор, описанный как «функция, возвращающая ...», всегда, когда он не используется в позиции имени функции в вызове, преобразуется в «указатель на функцию, возвращающую ...».

6.8 Преобразования ссылок

Везде, где инициализируются ссылки, может выполняться следующее преобразование.

Ссылка на класс может преобразовываться в ссылку на отрытый базовый класс этого класса, см. #8.6.3.

7. Выражения

Приоритет операций в выраженях такой же, как и порядок главных подразделов в этом разделе, наибольший приоритет у первого. Так например, выражения, о которых говорится как об операндах операции + (#7.4) – это те выражения, которые опрделены в ##7.1-7.4. Внутри каждого подраздела операции имеют одинаковый приоритет. В каждом подразделе для рассматриваемых в нем операций определяется их левая или правая ассоциатиность (порядок обработки операндов). Приоритет и ассоциатиность всех операций собран вместе в описании грамматики в #14.

В остальных случаях порядок вычисления выражения неопрделен. Точнее, компилятор волен вычислять подвыражения в том

порядке, который он считает более эффективным, даже если повыражения вызывают побочные эффекты. Порядок возникновения побочных эффектов неопределен. Выражения, включающие в себя коммутативные и асссоциативные операции (*, +, amp;, !, ^), мгут быть реорганизованы произвольным образом, даже при налчии скобок; для задания определенного порядка вычисления вражения необходимо использовать явную временную переменную.

Обработка переполнения и контроль деления при вычислении выражения машинно зависимы. В большинстве существующих реалзаций С++ переполнение целого игнорируется; обработка деления на 0 и всех исключительных ситуаций с числами с плавающей точкой различаются от машины к машине и обычно могут регулроваться библиотечными функциями.

Кроме стандартного значения, описанного в #7.2-7.15, операции могут быть перегружены*, то есть, могут быть заданы их значения для случая их применения к типам, определяемым пользователем, см. #7.16.

– * Этот термин применяется для описания использования в языке одной и той же лексемы для обозначения различных процдур; вид процедуры выбирается компилятором на основании дполнительной информации в виде числа и типа аргументов и т.п. (прим.перев.)

7.1 Основные выражения

Основные выражения, включающие в себя . , -» , индексрование и вызовы функций, группируются слева направо.

список_выражений: выражение список_выражений , выражение

id: идентификатор имя_функции_операции typedef-имя :: идентификатор typedef-имя :: имя_функции_операции

первичное_выражение: id :: идентификатор константа строка this ( выражение ) первичное_выражение [ выражение ] первичное_выражение ( список_выражений opt ) первичное_выражение . id первичное_выражение -» id

Идентификатор есть первичное выражение, причем соответтвенно описанное (#8). Имя_функции_операции есть идентификтор со специальным значением, см. #7.16 и #8.5.1.

Операция ::, за которой следует идентификатор из файловой области видимости, есть то же, что и идентификатор. Это позволяет ссылаться на объект даже в том случае, когда его идентификатор скрыт (#4.1).

Typedef-имя (#8.8) , за которым следует ::, после чего следует идентификатор, является первичным выражением. Typedef -имя должно обозначать класс (#8.5), и идентификатор должен обозначать член этого класса. Его тип специфицируется описанием идентификатора. Typedef-имя может быть скрыто именем, которое не является именем типа. В этом случае typedef-имя все равно может быть найдено и его можно использовать.

Константа является первичным выражением. Ее тип должен быть int, long или double в зависимости от ее формы.

Строка является первичным выражением. Ее тип – «массив символов». Обычно он сразу же преобразуется в указатель на ее первый символ (#6.7).

Ключевое слово this является локальной переменной в теле функции члена (см. #8.5) . Оно является указателем на объект, для которого функция была вызвана.

Выражение, заключенное в круглые скобки, является певичным выражением, чей тип и значение те же, что и у незаклченного в скобки выражения. Наличие скобок не влияет на то, является выражение lvalue или нет.

Первичное выражение, за которым следует выражение в квадратных скобках, является первичным выражением. Интуитиный смысл – индекс. Обычно первичное выражение имеет тип «указатель на ...», индексирующее выражение имеет тип int и тип результата есть «...». Выражение Е1[Е2] идентично (по оределению) выражению *((E1)+(E2)). Все тонкие места, необхдимые для понимания этой записи, содержатся в этом разделе вместе с обсуждением в ## 7.1, 7.2 и 7.4, соответственно, идентификаторов, * и + ; ниже, в #8.4.2 приводятся следствия из этого.

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

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VI

Сильнейший Столп Империи. Книга 4

Ермоленков Алексей
4. Сильнейший Столп Империи
Фантастика:
фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 4

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

Шайтан Иван 2

Тен Эдуард
2. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Шайтан Иван 2

Инквизитор тьмы 3

Шмаков Алексей Семенович
3. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор тьмы 3

Иной. Том 1. Школа на краю пустыни

Amazerak
1. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.75
рейтинг книги
Иной. Том 1. Школа на краю пустыни

Неудержимый. Книга XXX

Боярский Андрей
30. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXX

Скажи миру – «нет!»

Верещагин Олег Николаевич
1. Путь домой
Фантастика:
фэнтези
героическая фантастика
попаданцы
7.61
рейтинг книги
Скажи миру – «нет!»

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

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

Вернувшийся: Корпорация. Том III

Vector
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Корпорация. Том III

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Волхв пятого разряда

Дроздов Анатолий Федорович
2. Ледащий
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Волхв пятого разряда

Хозяин Стужи 4

Петров Максим Николаевич
4. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Хозяин Стужи 4