Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_4_Операции_и_выражения.doc
Скачиваний:
10
Добавлен:
05.11.2018
Размер:
660.99 Кб
Скачать

Приоритеты (ранги) операций

Все операции в С++ разбиты на группы, имеющие определенный приоритет и ассоциативность. Чем выше приоритет группы операций, тем выше она расположена в таблице. В рамках группы приоритеты одинаковы. Ассоциативность определяет порядок выполнения операций, если отсутствуют скобки и операции имеют один приоритет: часть операций выполняется справа налево, часть – слева направо. Для изменения порядка выполнения операций используются круглые скобки.

операции

краткое описание

ассоциативность

унарные операции

::

указание (изменение) области видимости

л  п

.

прямой доступ к компонентам структурированного объекта, например, структуры или объединения

л  п

косвенный доступ к компонентам структурированного объекта, адресуемого указателем

л  п

[ ]

индексация (выделение элемента массива)

п  л

( )

вызов функции

п  л

<тип>()

конструирование

++

постфиксный инкремент

п  л

--

постфиксный декремент

п  л

typeid

идентификация типа

dynamic_cast

преобразование типа с проверкой на этапе выполнения

static_cast

преобразование типа с проверкой на этапе компиляции

reinterpret_ cast

преобразование типа без проверки

const_cast

константное преобразование типа

sizeof

размер объекта

п  л

++

префиксный инкремент

п  л

--

префиксный декремент

п  л

~

поразрядное отрицание

п  л

!

логическое отрицание

п  л

-

арифметическое отрицание (унарный минус)

п  л

+

унарный плюс

п  л

&

взятие адреса

п  л

*

разадресация (разыменование)

п  л

new

динамическое выделение памяти

п  л

delete

освобождение динамической памяти

п  л

(<тип>)

преобразование типа

п  л

.*

прямое обращение к компоненту класса по имени объекта и указателю на компонент

л  п

*

косвенное обращение к компоненту класса через указатель на объект и указатель на компонент

л  п

бинарные и тернарные операции

*

умножение операндов арифметического типа

л  п

/

деление операндов арифметического типа; при целочисленных операндах абсолютное значение операнда округляется до целого

л  п

%

получение остатка от деления целочисленных операндов (деление по модулю)

л  п

+

бинарный плюс

л  п

-

бинарный минус

л  п

<<

сдвиг влево

л  п

>>

сдвиг вправо

л  п

<

меньше

л  п

<=

меньше или равно

л  п

>

больше

л  п

>=

больше или равно

л  п

==

равно

л  п

!=

не равно

л  п

&

поразрядная конъюнкция (битовое логическое умножение, И)

л  п

^

поразрядное «исключающее или»

л  п

|

поразрядная дизъюнкция (битовое логическое сложение, ИЛИ)

л  п

&&

логическое умножение, И, конъюнкция

л  п

||

логическое сложение, ИЛИ, дизъюнкция

л  п

?:

условная операция (тернарная)

л  п

=

присваивание

п  л

*=

умножение с присваиванием

п  л

/=

деление с присваиванием

п  л

%=

остаток от деления с присваиванием

п  л

+=

сложение с присваиванием

п  л

-=

вычитание с присваиванием

п  л

<<=

сдвиг влево с присваиванием

п  л

>>=

сдвиг вправо с присваиванием

п  л

&=

поразрядная конъюнкция с присваиванием

п  л

|=

поразрядная дизъюнкция с присваиванием

п  л

^=

поразрядное исключающее ИЛИ с присваиванием

п  л

throw

исключение

,

последовательное вычисление

л  п

!!!Обратите внимание на следующий пример:

Вычислить значение:

char var = 0x1F & 9 >> 1 + 2;

Используя таблицу приоритетов выполнения операций, имеем:

char var = 0x1F & (9 >> (1 + 2) ); и var == 0x1F & (9>> 3) == 0x1F & 1 == 000111112 & 1 ==1;