前置遞增和遞減運算子:++
和 --
語法
++ 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++ 內嵌函式會比巨集更理想,因為這類函式會排除副作用 (如這裡所述的副作用),並且可讓語言執行更完整的類型檢查。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應