Пространства имён
Варианты
Действия

Приоритет операций C++

Материал из cppreference.com
< cpp‎ | language
 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
операторы
приоритет операторов
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 

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

Приоритет Оператор Описание Ассоциативность
1 :: Область видимости Слева-направо
2 ++   -- Суффиксальный/постфиксный инкремент и декремент
() Вызов функции
[] Обращение к массиву по индексу
. Выбор элемента по ссылке
−> Выбор элемента по указателю
3 ++   -- Префиксный инкремент и декремент Справа-налево
+   Унарный плюс и минус
!   ~ Логическое НЕ и побитовое НЕ
(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 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 преобразует один тип на другой совместимый
типа
Оригинал:
static_cast converts one type to another compatible type
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
dynamic_cast преобразует виртуальный базовый класс для производных class
Оригинал:
dynamic_cast converts virtual base class to derived class
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
const_cast преобразует тип совместимого типа с различными cv qualifiers
Оригинал:
const_cast converts type to compatible type with different cv qualifiers
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
reinterpret_cast преобразует тип несовместимы type
Оригинал:
reinterpret_cast converts type to incompatible type
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
new выделяет memory
Оригинал:
new allocates memory
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
delete освобождает memory
Оригинал:
delete deallocates memory
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
sizeof запрашивает размер type
Оригинал:
sizeof queries the size of a type
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
sizeof... запрашивает размер Параметр пакета (начиная с C++11)
Оригинал:
sizeof... queries the size of a Параметр пакета (начиная с C++11)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
typeid запрашивает сведения о типе type
Оригинал:
typeid queries the type information of a type
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
noexcept проверяет выражение может вызвать исключение (начиная с C++11)
Оригинал:
noexcept checks if an expression can throw an exception (начиная с C++11)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
alignof запросов выравнивание требований типа (начиная с C++11)
Оригинал:
alignof queries alignment requirements of a type (начиная с C++11)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.