Сводка операций
Полное и подробное описание операций языка С++ дано в $$R.7. Советуем прочитать этот раздел. Здесь же приводится краткая сводка операций и несколько примеров. Каждая операция сопровождается одним или несколькими характерными для нее именами и примером ее использования. В этих примерах class_name обозначает имя класса, member - имя члена, object - выражение, задающее объект класса, pointer - выражение, задающее указатель, expr - просто выражение, а lvalue (адрес) - выражение, обозначающее не являющийся константой объект. Обозначение (type) задает имя типа в общем виде (с возможным добавлением *, () и т.д.). Если оно указано без скобок, существуют ограничения.
Порядок применения унарных операций и операций присваивания "справа налево", а всех остальных операций - "слева направо". То есть, a=b=c означает a=(b=c), a+b+c означает (a+b)+c, и *p++ означает *(p++), а не (*p)++.
Операции С++
:: | Разрешение области видимости | class_name :: member | |||
:: | Глобальное | :: name | |||
. | Выбор члена | object . member | |||
-> | Выбор члена | pointer -> member | |||
[] | Индексирование | pointer [ expr ] | |||
() | Вызов функции | expr ( expr_list ) | |||
() | Структурное значение | type ( expr_list ) | |||
sizeof | Размер объекта | sizeof expr | |||
sizeof | Размер типа | sizeof ( type ) | |||
++ | Постфиксный инкремент | lvalue ++ | |||
++ | Префиксный инкремент | ++ lvalue | |||
-- | Постфиксный декремент | lvalue -- | |||
-- | Префиксный декремент | -- lvalue | |||
~ | Дополнение | ~ expr | |||
! | Логическое НЕ | ! expr | |||
- | Унарный минус | - expr | |||
+ | Унарный плюс | + expr | |||
& | Взятие адреса | & lvalue | |||
* | Косвенность | * expr | |||
new | Создание (размещение) | new type | |||
delete | Уничтожение (освобождение) | delete pointer | |||
delete[] | Уничтожение массива | delete[] pointer | |||
() | Приведение(преобразование)типа | ( type ) expr | |||
. * | Выбор члена косвенный | object . pointer-to-member | |||
->* | Выбор члена косвенный | pointer -> pointer-to-member | |||
* | Умножение | expr * expr | |||
/ | Деление | expr / expr | |||
% | Остаток от деления | expr % expr | |||
+ | Сложение (плюс) | expr + expr | |||
- | Вычитание (минус) | expr - expr | |||
<< | Сложение (плюс) Сдвиг влево | expr << expr | |||
>> | Сдвиг вправо | expr >> expr | |||
< | Меньше | expr < expr | |||
<= | Меньше или равно | expr <= expr | |||
> | Больше | expr > expr | |||
>= | Больше или равно | expr >= expr | |||
== | Равно | expr == expr | |||
!= | Не равно | expr != expr | |||
& | Поразрядное И | expr & expr | |||
^ | Поразрядное исключающее ИЛИ | expr ^ expr | |||
| | Поразрядное включающее ИЛИ | expr | expr | |||
&& | Логическое И | expr && expr | |||
|| | Логическое ИЛИ | expr || expr | |||
? : | Операция условия | expr? expr : expr | |||
= | Простое присваивание | lvalue = expr | |||
*= | Присваивание с умножением | lvalue *= expr | |||
/= | Присваивание с делением | lvalue /= expr | |||
%= | Присваивание с взятием остатка от деления | lvalue %= expr | |||
+= | Присваивание со сложением | lvalue += expr | |||
-= | Присваивание с вычитанием | lvalue -= expr | |||
<<= | Присваивание со сдвигом влево | lvalue <<= expr | |||
>>= | Присваивание со сдвигом вправо | lvalue >>= expr | |||
&= | Присваивание с поразрядным И | lvalue &= expr | |||
|= | Присваивание с поразрядным включающим ИЛИ | lvalue |= expr | |||
^= | Присваивание с поразрядным исключающим ИЛИ | lvalue ^= expr | |||
, | Запятая (последовательность) | expr , expr |
Все операции таблицы, находящиеся между двумя ближайшими друг к другу горизонтальными чертами, имеют одинаковый приоритет. Приоритет операций уменьшается при движении "сверху вниз". Например, a+b*c означает a+(b*c), так как * имеет приоритет выше, чем +; а выражение a+b-c означает (a+b)-c, поскольку + и - имеют одинаковый приоритет, и операции + и - применяются "слева направо".