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

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

Жанры

Справочное руководство по C++

Страустрап Бьярн

Шрифт:

Конструкция имя-простого-типа (§R.7.1.6), за которой следует список-выражений в скобках образует значение указанного типа с учетом списка выражений. Если список выражений содержит более одного значения, тип должен быть классом с конструктором, описанным соответствующим образом (§R.8.4, §R.12.1).

Конструкция имя-простого-типа (§R.7.1.6), за которой следует пара скобок (пустая), образует значение указанного типа. Если тип является классом с конструктором, описанным соответствующим образом, будет вызван этот конструктор, в противном случае результатом будет неопределенное значение указанного типа, см. так же (§R.5.4).

R.5.2.4

Доступ к члену класса

Постфиксное выражение, за которым следует точка (.) и имя, является постфиксным выражением. Первое выражение должно быть объектом типа класс, а имя должно быть именем члена этого класса. Результатом будет поименованный член объекта и он будет адресом, если член является адресом.

Постфиксное выражение, за которым следует стрелка (-›) и имя, является постфиксным выражением. Первое выражение должно быть указателем на объект типа класс, а имя должно быть именем члена этого класса. Результатом будет поименованный член объекта, на который настроен указатель и он будет адресом, если член является адресом. Значит выражение E1-›MOS тоже самое, что (*E1).MOS.

Обратите внимание, что "объекты типа класс" могут быть структурами (§R.9.2) или объединениями (§R.9.5). Классы обсуждаются в §R.9.

R.5.2.5 Инкремент и декремент

Значение, получаемое в результате применения постфиксной операции ++, есть значение операнда. Операнд должен быть изменяемым адресом. Тип операнда должен быть арифметический или тип указателя. После выборки результата (для дальнейшего использования) объект увеличивается на 1. Тип результата совпадает с типом операнда, но не является адресом (см. так же §R.5.7 и §R.5.17).

Постфиксная операция -- сводится к операции декремента (уменьшение на 1) и аналогична операции ++.

R.5.3 Унарные операции

Выражения с унарными операциями выполняются справа налево.

унарное-выражение:

 постфиксное-выражение

 ++ унарное выражение

 -- унарное выражение

 унарная-операция выражение-приведения

 sizeof унарная-операция

 sizeof (имя-типа)

 выражение-размещения

 выражение-освобождения

унарная-операция: один из

 * & + - ! ~

Унарная операция * означает косвенность: выражение должно быть указателем, а результат является адресом, ссылающимся на объект, на который указывает выражение. Если тип выражения есть "указатель на T", то тип результата будет "T".

Результатом унарной операции & будет указатель на ее операнд. Операнд должен быть функцией или адресом или конструкцией уточненное-имя. Для первых двух случаев, если тип выражения есть "T", то тип результата будет "указатель на T". В частности, адрес объекта типа const T имеет тип const T*, тоже верно для volatile. Для случая уточненное имя если член класса "C" не является статическим и имеет тип "T", то тип результата операции будет "указатель на член C типа T". Для статических членов типа T результатом будет обычный "указатель на T". Адрес перегруженной функции (§R.13)

можно брать только при инициализации или присваивании, в котором левая часть однозначно определяет какая версия перегруженной функции имеется ввиду ($R13.3).

Операнд унарной операции + должен быть арифметического типа или типа указатель и результатом будет значение операнда. Для целочисленных операндов производится стандартное преобразование целочисленных. Тип результата есть тип преобразованного операнда.

Операнд унарной операции - должен иметь арифметический тип и результатом будет изменение знака операнда. Для целочисленных операндов выполняется стандартное преобразование целочисленных.

Операция для беззнаковых величин выполняется с помощью вычитания значения операнда из 2n, где n число битов в представлении преобразованного операнда. Тип результата есть преобразованного операнда.

Операнд операции логического отрицания ! должен иметь арифметический тип или быть указателем, результат равен 1, если значение операнда есть 0, и равен 0, если операнд не равен 0. Тип результата есть int.

Операнд операции ~ должен иметь целочисленный тип, результатом будет обращение двоичного представления операнда. Выполняются стандартные преобразования целочисленных. Тип результата есть тип преобразованного операнда.

R.5.3.1 Инкремент и декремент

Операнд префиксной операции ++ увеличивается на 1. Операнд должен быть изменяемым адресом. Тип операнда должен быть арифметическим или указателем. Результатом является новое значение операнда, оно считается адресом. Выражение ++x эквивалентно x+=1. Для уточнения преобразований можно обратиться к описанию сложения (§R.5.7) и операций присваивания (§R.5.17).

Префиксная операция -- сводится к уменьшению на 1 и выполняется аналогично префиксной операции ++.

R.5.3.2 Операция sizeof

Операция sizeof вычисляет размер своего операнда в байтах. Операнд должен быть или выражением, которое не вычисляется, или именем типа в скобках. Операцию sizeof нельзя применять к функции, битовому полю, неопределенному классу, типу void или к массиву с неуказанными границами индексов. Байт никак не определяется языком, кроме как результата операции sizeof, именно sizeof(char) есть 1.

Если операция применяется к ссылке, результатом будет размер объекта, на который настроена ссылка. Если она применяется к классу, результатом будет размер объекта этого класса в байтах с учетом всех дополнительных байтов, которые потребуется для размещения такого объекта в массиве. Размер любого класса или объекта класса больше нуля. В случае массива операция выдает полное число байтов в массиве. Отсюда следует, что размер массива из n элементов равен размеру элемента, умноженному на n.

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

Результатом операции будет константа типа size_t. Этот тип определен в стандартном заголовочном файле ‹stddef.h› и является зависящим от реализации беззнаковым целочисленным типом.

R.5.3.3 Операция new

Операция new предназначена для создания объекта типа имя-типа (§R.8.1). Этот тип должен быть типом объекта и функции нельзя размещать с ее помощью, хотя указатели на функции можно.

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

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

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

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

Магнатъ

Кулаков Алексей Иванович
4. Александр Агренев
Приключения:
исторические приключения
8.83
рейтинг книги
Магнатъ

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

Аргумент барона Бронина 3

Ковальчук Олег Валентинович
3. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 3

Санек 2

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

Враг из прошлого тысячелетия

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

Имя нам Легион. Том 8

Дорничев Дмитрий
8. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 8

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Чужая невеста босса. Ты будешь моей!

Лесневская Вероника
7. Роковые подмены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Чужая невеста босса. Ты будешь моей!

Зомби

Парсиев Дмитрий
1. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Зомби

Город Богов

Парсиев Дмитрий
1. Профсоюз водителей грузовых драконов
Фантастика:
юмористическая фантастика
детективная фантастика
попаданцы
5.00
рейтинг книги
Город Богов

Темный Лекарь

Токсик Саша
1. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь