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

на главную

Жанры

Шрифт:

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 приводятся следствия из этого.

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

Темный Патриарх Светлого Рода 6

Лисицин Евгений
6. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 6

Полководец поневоле

Распопов Дмитрий Викторович
3. Фараон
Фантастика:
попаданцы
5.00
рейтинг книги
Полководец поневоле

"Колхоз: Назад в СССР". Компиляция. Книги 1-9

Барчук Павел
Колхоз!
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Колхоз: Назад в СССР. Компиляция. Книги 1-9

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Измена. Ребёнок от бывшего мужа

Стар Дана
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Ребёнок от бывшего мужа

Отмороженный 3.0

Гарцевич Евгений Александрович
3. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 3.0

Мимик!

Северный Лис
1. Сбой Системы!
Фантастика:
боевая фантастика
5.40
рейтинг книги
Мимик!

Целитель. Книга вторая

Первухин Андрей Евгеньевич
2. Целитель
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Целитель. Книга вторая

(Бес) Предел

Юнина Наталья
Любовные романы:
современные любовные романы
6.75
рейтинг книги
(Бес) Предел

Гром над Империей. Часть 2

Машуков Тимур
6. Гром над миром
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Гром над Империей. Часть 2

Дикая фиалка Юга

Шах Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Дикая фиалка Юга

Физрук 2: назад в СССР

Гуров Валерий Александрович
2. Физрук
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Физрук 2: назад в СССР

Возвращение

Жгулёв Пётр Николаевич
5. Real-Rpg
Фантастика:
боевая фантастика
рпг
альтернативная история
6.80
рейтинг книги
Возвращение

Релокант

Ascold Flow
1. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант