Увеличение и операторы декремента префикса. ++ и --

++ unary-expression
–– unary-expression

Заметки

Оператор инкремента (prefix++добавляет его к своему операнду); это увеличенное значение результата выражения.Операнд l-значением не должен быть типа Const.Результат l-значение того же типа, что и операнд.

оператор декремента префикса (--) аналогичн оператора инкремента префикса, за исключением того, что операнд уменьшается на единицу, а результат это уменьшенное значение.

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

И префикс и увеличиваются и операторы декремента постфиксная влияют на их операндов.Ключевое различие между ними, если увеличение или уменьшение выполняемые при оценке выражения.(Дополнительные сведения см. в разделе Postfix увеличение и операторы декремента.) В форме префикса, увеличение или уменьшение выполняемые до значение используется для вычисления выражений, поэтому значение выражения отличается от значение операнда.В форме постфиксная, увеличение или уменьшение выполняемые после значение используется для вычисления выражений, поэтому значение выражения совпадает с значение операнда.Например, следующая программа выводит «++i = 6«:

// expre_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

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

Целочисленные или типа операнд перемещаемые увеличивается или уменьшается целым числом 1.Тип результата совпадает с типом операнда.Операнд типа указателя увеличивается или уменьшается размер объекта он относится.Точки инкрементированные указатель на следующий объект; точки декрементированные указателя к предыдущему объекту.

Поскольку увеличение и операторы декремента имеют побочные эффекты, использование выражений с шагом или операторы декремента в выражении макрос препроцессора может быть нежелательным результатам результаты.Рассмотрим следующий пример.

// expre_Increment_and_Decrement_Operators2.cpp
#define max(a,b) ((a)<(b))?(b):(a)

int main()
{
   int i = 0, j = 0, k;
   k = max( ++i, j );
}

Макрос развернуть:

k = ((++i)<(j))?(j):(++i);

If i больше или равно j или меньше j 1 он будет увеличен дважды.

ПримечаниеПримечание

Функции C++ встроенные предпочтительны макрос в большинстве случаев, поскольку они исключают побочные эффекты, например, описанные здесь, и позволяют язык для выполнения более полную проверку типов.

См. также

Ссылки

Выражения с унарными операторами

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

Operator precedence and Associativity

Основные понятия

Увеличение и операторы декремента префикса