Поделиться через


Постфиксные операторы увеличения и уменьшения ++ и --

postfix-expression ++ 
postfix-expression ––

Заметки

В C++ доступны префиксные и постфиксные операции инкремента и декремента. В этом разделе описываются только их постфиксные формы. (Дополнительные сведения см. в разделе Префиксные операторы инкремента и декремента.) Различие между этими двумя формами заключается в том, что в постфиксной записи оператор находится после параметра постфиксное-выражение, в то время как в префиксной записи он располагается перед выражением. В следующем примере представлен постфиксный оператор инкремента:

i++;

В результате применения постфиксного оператора инкремента (++) значение операнда увеличивается на одну единицу соответствующего типа. Аналогично, в результате применения постфиксного оператора декремента (––) значение операнда уменьшается на одну единицу соответствующего типа.

Необходимо учитывать, что в постфиксной операции инкремента или декремента значение выражения вычисляется до применения соответствующего оператора. Операция инкремента или декремента выполняется после вычисления операнда. Эта особенность возникает, только когда постфиксная операция инкремента или декремента выполняется в контексте выражения.

Если же постфиксный оператор применяется к аргументу функции, то инкремент или декремент значения аргумента необязательно будет выполнен до его передачи в функцию. Дополнительные сведения см. в разделе 1.9.17 стандарта C++.

Когда постфиксный оператор инкремента применяется к указателю на массив объектов типа long, то фактически к внутреннему представлению указателя прибавляется 4. В результате этого указатель, который раньше относился n-й элемент массива, после выполнения операции указывает на элемент (n+1).

Операнды для постфиксных операторов декремента должны иметь изменяемые (без модификатора const) l-значения арифметического или указательного типа. Результат имеет такой же тип, как и постфиксное-выражение, однако он не может быть длиннее l-значения.

Операнд постфиксного оператора инкремента также может иметь тип bool; в этом случае операнд вычисляется, а затем получает значение true. Операнд постфиксного оператора декремента не может иметь тип bool.

Ниже показан пример постфиксного оператора инкремента.

// expre_Postfix_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main() {
   int i = 10;
   cout << i++ << endl;
   cout << i << endl;
}

Постфиксные операции инкремента или декремента для типов перечисления не поддерживаются:

enum Compass { North, South, East, West );
Compass myCompass;
for( myCompass = North; myCompass != West; myCompass++ ) // Error

См. также

Ссылки

Постфиксные выражения

Операторы C++

Операторы C++, приоритет и ассоциативность

Постфиксные операторы увеличения и уменьшения в C