MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Приоритет операций в языке C++
07.12.2017
16:15
Раздел: Компьютер - Программирование - Язык C++

В следующей таблице перечислены приоритет и ассоциативность операций C++. Операции перечислены сверху вниз в порядке убывания приоритета (т.е. вверху находятся операторы, которые выполняются в первую очередь).



Приоритет

Операция

Описание

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

1

::

Область видимости

Слева направо

2

a++ a--

Постинкремент и постдекремент

()

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

[]

Обращение к массиву по индексу

.

Выбор элемента по ссылке

−>

Выбор элемента по указателю

3

++a --a

Прединкремент и преддекремент

Справа налево

+  

Унарный плюс и минус

!   ~

Логическое НЕ и побитовое НЕ

(type)

Приведение к типу type

*

Indirection (разыменование)

&

Адрес

sizeof

Размер

new, new[]

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

delete, delete[]

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

4

.*   ->*

Указатель на член

Слева направо

5

*   /   %

Умножение, деление и остаток

6

+  

Сложение и вычитание

7

<<   >>

Побитовый сдвиг влево и вправо

8

<   <=

Операции сравнения < и ≤

>   >=

Операции сравнения > и ≥

9

==   !=

Операции сравнения = и ≠

10

&

Побитовое И

11

^

Побитовый XOR (исключающее ИЛИ)

12

|

Побитовое ИЛИ (inclusive or)

13

&&

Логическое И

14

||

Логическое ИЛИ

15

?:

Тернарное условие

Справа налево

=

Прямое присваивание (предоставляемое по умолчанию для C++ классов)

+=   −=

Присвоение с суммированием и разностью

*=   /=   %=

Присвоение с умножением, делением и остатком от деления

<<=   >>=

Присвоение с побитовым сдвигом слево и вправо

&=   ^=   |=

Присвоение с побитовыми логическими операциями (И, XOR, ИЛИ)

16

throw

Операция выброса исключения

17

,

Запятая

Слева направо

При разборе выражения операция, указанная в некоторой строке таблицы, более тесно связана с аргументами (как в случае применения скобок), чем любая операция из строк, расположенных ниже. Например, выражения std::cout<<a&b и *p++ будут разобраны как (std::cout<<a)&b и *(p++), а не как std::cout<<(a&b) и (*p)++.

Операции, расположенные в одной ячейке (в одной ячейке может быть несколько строк) имеют одинаковый приоритет и разбираются с учетом ассоциативности. Например, выражение a=b=c будет разобрано как a=(b=c), а не (a=b)=c, так как операция присваивания правоассоциативна.

Перегрузка операций не влияет на приоритеты.


Примечание

Стандарт не определяет порядок приоритетов. Они выводятся из грамматики языка.

const_cast, static_cast, dynamic_cast, reinterpret_cast и typeid не включены в таблицу, так как они никогда не двусмысленны.


Смотрите также

Order of evaluation of operator arguments at run time.


Common operators

назначение

incrementNJdecrement

арифметики

логичной

сравнение

memberNJaccess

другие

a = b
a = rvalue
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b

a[b]
*a
&a
a->b
a.b
a->*b
a.*b

a(...)
a, b
(type) a
? :

Special operators

static_cast преобразует один тип на другой совместимый типа

dynamic_cast преобразует виртуальный базовый класс для производных class

const_cast преобразует тип совместимого типа с различными cv qualifiers

reinterpret_cast преобразует тип несовместимы type

new выделяет memory

delete освобождает memory

sizeof запрашивает размер type

sizeof... запрашивает размер Параметр пакета (начиная с C++11)

typeid запрашивает сведения о типе type

noexcept проверяет выражение может вызвать исключение (начиная с C++11)

alignof запросов выравнивание требований типа (начиная с C++11)



Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования