Операции и выражения задают определённую последовательность действий, но не являются законченными предложениями языка. Пример выражения с операцией вычитания: 5 – x.
Операции могут производиться с одним (унарные), двумя (бинарные) или тремя (тернарные) операндами, т.е. элементами-участниками операции. Операндами могут быть константы, переменные, вызовы функций и выражения.
Выражение – это последовательность операций, операндов и круглых скобок, которая задает вычислительный процесс получения определённого результата. Простейшее выражение – это константа, переменная или вызов функции. Например, выражениями являются:
y + 10
sqrt(36) // sqrt – вычисление квадратного корня
5*val*(val + 10/(cos(y) + 1))
a > b
Порядок вычисления выражения определяется круглыми скобками и приоритетом операций. Выражения с высшим приоритетом вычисляются раньше. Приоритеты операций в C++ аналогичны привычным приоритетам в математике и приведены в таблице 2 (в порядке убывания).
вызов функции или конструирование выражения
выбор элемента по индексу
выбор элемента по имени
выбор элемента по имени через указатель
постфиксный инкремент
постфиксный декремент
идентификация типа
преобразования с проверкой во время выполнения
преобразования с проверкой во время компиляции
преобразование без проверки
преобразование константного ограничения
слева
sizeof
++
––
~
!
+
–
&
*
new
delete
(тип)
размер операнда в байтах
префиксный инкремент
префиксный декремент
инверсия (поразрядная НЕ)
логическое НЕ
унарный плюс
унарный минус
адрес
разыменование
выделение памяти или создание объекта
освобождение памяти или уничтожение объекта
преобразование типа
справа
.*
–>*
выбор элемента по имени через указатель
выбор элемента по имени через указатель на указатель
слева
*
/
%
умножение
деление
остаток от деления
слева
+
–
сложение
вычитание
слева
<<
>>
сдвиг влево
сдвиг вправо
слева
<
>
<=
>=
меньше
больше
меньше или равно
больше или равно
слева
==
!=
равно
не равно
слева
&
поразрядное И
слева
^
поразрядное исключающее ИЛИ
слева
|
поразрядное ИЛИ
слева
&&
логическое И
слева
||
логическое ИЛИ
слева
?:
тернарное условие
справа
=, *=, /=, %=, +=, –=, <<=, >>=, &=, |=, ^=
присваивание
справа
throw
генерация исключения
справа
,
последовательность выражений
слева
Операторы задают последовательность действий компилятора, но, в отличие от выражений, являются законченными предложениями языка. Обычно операторы заканчиваются точкой с запятой.
Пустой оператор состоит только из точки с запятой. Он может использоваться в таких местах программы, где синтаксис требует обязательного наличия оператора, а логика работы – нет (например, циклы, условия). При использовании пустой оператор рекомендуется ставить на отдельной строчке, чтобы явно обозначить его применение.
Составной оператор (операторный блок) обозначается с помощью фигурных скобок и обычно содержит несколько операторов. Составной оператор используется там, где синтаксис языка требует наличие лишь одного оператора, а логика программы – сразу нескольких (циклы, условия, …). Пример вложенных составных операторов: