Порядок выполнения операций c++

17 :: контекст
16 -> операция непрямого доступа к членам класса
16 . операция точки (доступ к полю)
16 [] индекс массива
16 () вызов функции
15 ++ -- инкремент и декремент
15 ~ поразрядное НЕ
15 ! логическое НЕ
15 - унарный минус
15 * операция разыменования
15 new delete выделение памяти из кучи
14 .* доступ к указателю-члену
13 * / % умножение, деление и взятие остатка
12 + - сложение и вычитание
11 >> 10 > >= 9 == != операции проверки на равенство
8 & поразрядное И
7 ^ поразрядное исключающее ИЛИ
6 | поразрядное ИЛИ
5 && логическое И
4 || логическое ИЛИ
3 ?: условная операция
2 = *= /= %= += -= операции присваивания
2 >= поразрядные операции сдвига с присваиванием
2 &= |= ^= поразрядные логическоие операции с присваиванием
1 , запятая

взял отсюда = http://shatalov.su/ru/articles/cpp_prime...

далее подробнее
Чем ниже блок по тексту далее, тем приоритет операции ниже разбиты на блоки - в рамках одного блока приоритет одинаковый - и порядок вычислений определяется видом ассоциированности.(справедливо для си++ версия для Си здесь):

-----Блок № 1------------------------

разрешение области видимости class-name :: member
разрешение области видимости namespace-name :: member
глобально :: name
глобально :: qualified-name

-----Блок №2 ------------------------

  1. выбор члена object. member
  2. выбор члена pointer -> member
  3. доступ по индексу
  4. вызов функции
  5. конструирование значения
  6. постфиксный инкремент
  7. постфиксный декремент
  8. идентификация типа
  9. идентификация типа во время выполнения
  10. преобразование с проверкой во время выполнения
  11. преобразование с проверкой во время компиляции
  12. преобразование без проверки
  13. константное преобразование

им по номерам соответствуют:

  1. object. member
  2. pointer -> member
  3. pointer [ expr ]
  4. expr[ expr-list)
  5. type {expr-list)
  6. value ++
  7. value --
  8. typeid{type)
  9. typeid (expr)
  10. dynamic cast ( expr}
  11. static_cast ( expr)
  12. reinterpret_cast ( expr j
  13. const_cast ( expr)

-----Блок №3 ------------------------

  1. размер объекта
  2. размер типа
  3. префиксный инкремент
  4. префиксный декремент
  5. дополнение
  6. отрицание
  7. унарный минус
  8. унарный плюс
  9. адрес
  10. разыменование
  11. создать (выделить память)
  12. создать (выделить память и инициализировать)
  13. создать (разместить)
  14. создать (разместить и инициализировать)
  15. уничтожить (освободить память)
  16. уничтожить массив
  17. приведение (преобразование типа)

им по номерам соответствуют:

  1. sizeofexpr
  2. sizeof{ type)
  3. ++ lvalue
  4. - lvalue
  5. - lvalue
  6. I expr
  7. - expr
  8. + expr
  9. & lvalue
  10. * expr
  11. new type
  12. new type (expr-list)
  13. new (expr-list) type
  14. new ( expr-list) type ( expr-list
  15. delete pointer
  16. delete[] pointer
  17. (type ) expr

-----Блок №3 ------------------------

  • выбор члена object * pointer-to-member
  • выбор члена pointer —>* pointer-to-member

-----Блок №4 ------------------------

  • умножение expr * expr
  • деление expr / expr
  • остаток от деления (деление по модулю) expr%expr

-----Блок №5------------------------

  • сложение (плюс) +
  • вычитание (минус) -

-----Блок №6 ------------------------

  • сдвиг влево a
  • сдвиг вправо b>>a

-----Блок №7------------------------

  1. меньше
  2. меньше или равно
  3. больше
  4. больше или равно

им соответствуют:

  1. expr
  2. expr
  3. expr > expr
  4. expr >= expr

-----Блок №8------------------------

  1. равно
  2. не равно

т.е =

  1. expr == expr
  2. expr != expr

-----Блок № 9------------------------

  • побитовое И (AND) expr & expr

-----Блок №10 ------------------------

  • побитовое исключающее ИЛИ (OR) expr ^ expr

-----Блок №11 ------------------------

  • побитовое ИЛИ (OR) expr!expr

-----Блок №12 ------------------------

  • логическое И (AND) expr && expr

-----Блок №13 ------------------------

  • логическое ИЛИ (OR) expr |i expr

-----Блок № 14------------------------

  • условное выражение expr ? expr: expr

-----Блок №15 ------------------------

  • простое присваивание value = expr
  • умножение и присваивание value *= expr
  • деление и присваивание value /= expr
  • остаток и присваивание value %= expr
  • сложение и присваивание value += expr
  • вычитание и присваивание value -= expr
  • сдвиг влево и присваивание value «= expr
  • сдвиг вправо п присваивание value »= expr
  • И и присваивание value &= expr
  • ИЛИ и присваивание value |= expr
  • исключающее ИЛИ и присваивание value ^= expr

-----Блок № 16 ------------------------

генерация исключения throw expr

-----Блок № 17------------------------

запятая (последовательность) expr, expr

----- ------------------------

  • умножение expr * expr
  • деление expr / expr
  • остаток от деления (деление по модулю) expr%expr

В каждом блоке расположены операторы с одинаковым приоритетом. Операторы
в блоке, расположенном выше, имеют более высокий приоритет. Например: а+Ь*с означает а+(Ь*с), а не (а+Ь)*с, потому что * имеет более высокий приоритет, чем +.
Унарные операторы и операторы присваивания правоассоциативны - то есть сначала вычисляется результат справа, а все осталь-
ные левоассоциативны. Например, а=Ь=с означает а=(Ь=с) - то "=" - правоассоциативный оператор
в то время как =
a+b+с означает (а+Ь)+с следовательно "+" - левоассоциативный оператор.

Несколько грамматических правил нельзя выразить в терминах приоритетов (на-
зываемых также силой связывания) и ассоциативности.
Например=

a=b<c ? d=e :f=g; 

означает

а=((Ь<с) ? (d=e): (f=g)) 

но для того чтобы об этом догадаться, нужно обратиться
к правилам грамматики (§ А.5).
Перед использованием грамматических правил из символов составляются лексические обозначения (лексемы, § А.З). Для получения каждой лексемы выбирается самая длинная из возможных последовательностей символов.