前置遞增和遞減運算子:++--

語法

++ unary-expression
-- unary-expression

備註

前置遞增運算子 (++) 會將其運算元加一,這個增量值是運算式的結果。 運算元必須是不屬於 const 型別的 l-value。 結果會是與運算元相同類型的左值。

前置遞減運算子 (--) 類似前置遞增運算子,不過,運算元會減一且結果是這個減量值。

Visual Studio 2017 15.3 版和更新版本 (適用於 /std:c++17 模式及更新版本):遞增或遞減運算子的運算元不能是型別 bool

前置和後置遞增和遞減運算子都會影響其運算元。 它們之間的主要差異在於遞增或遞減在運算式評估中發生的順序 。 (如需詳細資訊,請參閱後置遞增和遞減運算子 (部分機器翻譯))。在前置形式中,遞增或遞減會在運算式評估中使用值之前發生,因此運算式的值會與運算元的值不同。 在後置形式中,遞增或遞減會在運算式評估中使用值之後發生,因此運算式的值會與運算元的值相同。 例如,下列程式會列印 "++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);

如果 i 大於或等於 j,或是比 j 少 1,則會遞增兩次。

注意

在許多情況下,C++ 內嵌函式會比巨集更理想,因為這類函式會排除副作用 (如這裡所述的副作用),並且可讓語言執行更完整的類型檢查。

另請參閱

具有一元運算子的運算式
C++ 內建運算子、優先順序和順序關聯性
前置遞增和遞減運算子