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

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

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

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

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

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

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

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

Описание оператора Оператор Альтернатива
Приоритет группы 1, без ассоциативности
Разрешение области ::
Приоритет группы 2, ассоциативность слева направо
Выбор члена для указателей (объект или указатель) . или ->
Индекс массива []
Вызов функции ()
Постфиксный инкремент ++
Постфиксный декремент --
Имя типа 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, ассоциативность слева направо
Побитовое исключающее ИЛИ ^ xor
Приоритет группы 12, ассоциативность слева направо
Побитовое ИЛИ | bitor
Приоритет группы 13, ассоциативность слева направо
Логическое И && and
Приоритет группы 14, ассоциативность слева направо
Логическое ИЛИ || or
Приоритет группы 15, ассоциативность справа налево
Условная логика ? :
Передача прав и обязанностей =
Присваивание умножения *=
Присваивание деления /=
Назначение модуля %=
Присваивание сложения +=
Присваивание вычитания -=
Присваивание сдвига влево <<=
Присваивание сдвига вправо >>=
Назначение побитового И &= and_eq
Назначение побитового включающего ИЛИ |= or_eq
Назначение побитового исключающего ИЛИ ^= xor_eq
Выражение Throw throw
Приоритет группы 16, ассоциативность слева направо
Запятая ,

См. также раздел

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