Операции C++ подробно и систематически описываются в #с.7; прочитайте, пожалуйста, этот раздел. Здесь же приводится краткая сводка и некоторые примеры. После каждой операции приведено одно или более ее общеупотребительных названий и пример ее использования. В этих примерах имя_класса - это имя класса, член - имя члена, объект - выражение, дающее в результате объект класса, указатель - выражение, дающее в результате указатель, выр - выражение, а lvalue - выражение, денотирующее неконстантный объект. Тип может быть совершенно произвольным именем типа (со *, () и т.п.) только когда он стоит в скобках, во всех остальных случаях существуют ограничения.
Унарные операции и операции присваивания правоассоциативны, все остальные левоассоциативны. Это значит, что a=b=c означает a=(b=c), a+b+c означает (a+b)+c, и *p++ означает *(p++), а не (*p)++.
Сводка Операций (часть 1)
:: разрешение области видимости имя_класса :: член :: глобальное :: имя
-> | выбор члена | указатель->член | [] | индексация | указатель [ выр ] | () | вызов функции | выр (список_выр) | () | построение значения | тип (список_выр) | sizeof | размер объекта | sizeof выр | sizeof | размер типа | sizeof ( тип ) |
++ | приращение после | lvalue++ | ++ | приращение до | ++lvalue | -- | уменьшение после | lvalue-- | -- | уменьшение до | --lvalue | ~ | дополнение | ~ выр | ! | не | ! выр | - | унарный минус | - выр | + | унарный плюс | + выр | & | адрес объекта | & lvalue | * | разыменование | * выр | new | создание (размещение) | new тип | delete | уничтожение (освобождение) | delete указатель | delete[] | уничтожение вектора | delete[ выр ] указатель | () | приведение (преобразование типа) | ( тип ) выр |
* | умножение | выр * выр | / | деление | выр / выр | % | взятие по модулю (остаток) | выр % выр |
+ | сложение (плюс) | выр + выр | - | вычитание (минус) | выр - выр |
В каждой отчерченной части находятся операции с одинаковым приоритетом. Операция имеет приоритет больше, чем операции из частей, расположенных ниже. Например: a+b*c означает a+(b*c), так как * имеет приоритет выше, чем +, а a+b-c означает (a+b)-c, поскольку + и - имеют одинаковый приоритет (и поскольку + левоассоциативен).
Сводка Операций (часть 2)
<< | сдвиг влево | lvalue << выр | >> | сдвиг вправо | lvalue >> выр |
< | меньше | выр < выр | <= | меньше или равно | выр <= выр | > | больше | выр > выр | >= | больше или равно | выр >= выр |
== | равно | выр == выр | != | не равно | выр != выр |
^ | побитовое исключающее ИЛИ | выр ^ выр |
| | побитовое включающее ИЛИ | выр | выр |
&& | логическое И | выр && выр |
|| | логическое включающее ИЛИ | выр || выр |
? : | арифметический if | выр ? выр : выр |
= | простое присваивание | lvalue = выр | *= | умножить и присвоить | lvalue = выр | /= | разделить и присвоить | lvalue /= выр | %= | взять по модулю и присвоить | lvalue %= выр | += | сложить и присвоить | lvalue += выр | -= | вычесть и присвоить | lvalue -= выр | <<= | сдвинуть влево и присвоить | lvalue <<= выр | >>= | сдвинуть вправо и присвоить | lvalue >>= выр | &= | И и присвоить | lvalue &= выр | |= | включающее ИЛИ и присвоить | lvalue |= выр | ^= | исключающее ИЛИ и присвоить | lvalue ^= выр |
, | запятая (последование) | выр , выр |
1 2 3 4
8 8 8
| |