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

Приоритет операций 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 <   <= For relational operators < and ≤ respectively
>   >= For relational operators > and ≥ respectively
9 ==   != For relational = and ≠ respectively
10 & Побитовое И
11 ^ Побитовый XOR (исключающее или)
12 | Побитовое ИЛИ (inclusive or)
13 && Логическое И
14 || Логическое ИЛИ
15 ?: Тернарное условие Справа-налево
= Прямое присваивание (предоставляемое по умолчанию для C++ классов)
+=   −= Присвоение с суммированием и разностью
*=   /=   %= Присвоение с умножением, делением и остатком от деления
<<=   >>= Assignment by bitwise left shift and right shift
&=   ^=   |= Assignment by bitwise AND, XOR, and OR
16 throw Throw оператор (выброс исключений)
17 , Запятая Слева-направо

When parsing an expression, an operator which is listed on some row will be bound tighter (as if by parentheses) to its arguments than any operator that is listed on a row further below it. For example, the expressions std::cout<<a&b and *p++ are parsed as (std::cout<<a)&b and *(p++), and not as std::cout<<(a&b) or (*p)++.

Operators that are in the same cell (there may be several rows of operators listed in a cell) are evaluated with the same precedence, in the given direction. For example, the expression a=b=c is parsed as a=(b=c), and not as (a=b)=c because of right-to-left associativity.

An operator's precedence is unaffected by overloading.

[править] Заметки

The standard itself doesn't specify precedence levels. They are derived from the grammar.

const_cast, static_cast, dynamic_cast, reinterpret_cast and typeid are not included since they are never ambiguous.

[править] Смотрите также

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