Встроенные операторы C++, приоритет и ассоциативность

Язык C++ включает все операторы C и еще несколько новых операторов. Операторы определяют, какое вычисление следует выполнить с одним или несколькими операндами.

Очередность и ассоциативность

Приоритет оператора определяет порядок операций в выражениях, содержащих несколько операторов. Ассоциативность оператора указывает, в выражении, которое содержит несколько операторов с одинаковым приоритетом, операнд сгруппирован с одним слева или одним справа.

Альтернативные орфографии

C++ задает альтернативные орфографии для некоторых операторов. В C альтернативные орфографии предоставляются в виде макросов в заголовке <iso646.h> . В C++эти альтернативные варианты являются ключевое слово, а использование <iso646.h> или эквивалентной <C++ ciso646> не рекомендуется. В Microsoft C++ /permissive- параметр или /Za компилятор требуется для включения альтернативных орфографических ошибок.

Приоритет оператора C++ и таблица ассоциативности

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

Описание оператора Оператор Альтернатива
Приоритет группы 1 без ассоциативности
Разрешение области ::
Приоритет группы 2, слева направо ассоциативность
Выбор элемента (объект или указатель) . или ->
Подстрочный индекс массива []
Вызов функции ()
Увеличение постфикса ++
Декремент postfix --
Имя типа typeid
Преобразование типа константы const_cast
Динамическое преобразование типов dynamic_cast
Повторное преобразование типов reinterpret_cast
Преобразование статических типов static_cast
Приоритет группы 3, справа налево ассоциативность
Размер объекта или типа sizeof
Увеличение префикса ++
Декремент префикса --
Дополнение одного ~ compl
Логические не ! not
Унарное отрицание -
Унарный плюс +
Адрес &
Косвенный *
Создание объекта new
Уничтожить объект delete
Cast ()
Приоритет группы 4, слева направо ассоциативность
Указатель на член (объекты или указатели) .* или ->*
Приоритет группы 5, слева направо ассоциативность
Умножение *
Деление /
Модуль %
Приоритет группы 6, слева направо ассоциативность
Сложение +
Вычитание -
Приоритет группы 7, слева направо ассоциативность
Сдвиг влево <<
Сдвиг вправо >>
Приоритет группы 8, слева направо ассоциативность
Меньше чем <
Больше чем >
Меньше или равно <=
Больше или равно >=
Приоритет группы 9, слева направо ассоциативность
Равенство ==
Неравенство != not_eq
Группа 10 приоритет слева направо на ассоциативность
Побитовое И & bitand
Приоритет группы 11 слева направо
Побитовая эксклюзивная OR ^ xor
Приоритет группы 12 слева направо
Битовая инклюзивная ИЛИ | bitor
Приоритет группы 13, слева направо ассоциативность
Логическое И && and
Приоритет группы 14 слева направо
Логическое ИЛИ || or
Приоритет группы 15, справа налево ассоциативность
Условный ? :
Передача прав и обязанностей =
Назначение умножения *=
Назначение деления /=
Назначение модуля %=
Добавление назначения +=
Назначение вычитания -=
Назначение влево <<=
Назначение вправо >>=
Битовое назначение AND &= and_eq
Побитовое инклюзивное назначение OR |= or_eq
Побитовое монопольное назначение OR ^= xor_eq
выражение throw throw
Приоритет группы 16 слева направо
Comma ,

См. также

Перегрузка операторов