C++自增自減運算子(++和--)用法詳解

2020-07-16 10:04:39
儲存在變數中的值雖然可以增加或減少任何數量,但是將它們自增或自減 1 是特別常見的。例如,我們經常進行令迴圈控制變數在每次回圈疊代時都自增 1 或自減 1 的操作。

事實上,如果說要自增或自減一個值而沒有指定多少,那麼一般可以將其理解為自增或自減 1,C++ 提供了一對運算子執行此操作,它們都是一元運算子,這意味著它們只在一個運算元上執行。

自增運算子(++)可以將其運算元的值增加 1,自減運算子(-)可以將其運算元的值減 1。例如,在表示式 num++ 中,單個運算元是變數 num,該表示式將其值增加 1。

以下是將變數 num 的值自增 1 的 3 種不同的方法:

num = num + 1;
num + = 1;
num ++;  //此語句使用了自增運算子

以下是 3 種不同的自減 1 的方法:

num = num - 1;
num - = 1;
num --;   //此語句使用了自減運算子

請注意,在自增運算子(++)的兩個加號之間或運算子與變數名之間都沒有空格,同樣,自減運算子(--)的兩個減號之間以及該運算子與變數名之間也不存在空格。另外還要注意的是,自增和自減運算子不能對常數執行運算。它們只能對一個左值(例如變數)執行操作。

以下是使用自增和自減運算子的合法和非法表示式範例:

count++; // 合法
count--; // 合法
5++; //非法
5--; //非法

下面的程式演示了自增和自減運算子的正確使用方法。它使用這些運算子來更改迴圈控制變數的值。
#include <iostream>
using namespace std;

int main()
{
    int count = 1;
    while (count < 6)
    {
        cout << count << " ";
        count++; //The ++ operator increments count
    }
    cout << endl;
    int count =5; // Re-Initialize the loop control variable to 5
    while (count> 0)
    {
        count << count << " ";
        count --;
    }
    cout << endl;
    return 0;
}
程式輸出結果:

1 2 3 4 5
5 4 3 2 1

字尾和字首模式

以上所有範例中使用的自增和自減運算子都是採用字尾模式的,即運算子放在變數之後。其實這 2 個運算子也可以在字首模式下工作,即運算子放在變數名之前。

這意味著,上面程式中第 10 行和第 17 行的語句也可以寫作如下形式:

++count;
--count;

在字首和字尾模式下,這些運算子同樣是從它們的運算元中加 1 或減 1。那麼它們之間有什麼區別呢?

在像上面程式中這樣的簡單使用語句中,沒有區別。但是,當這些運算子用於不僅僅是自增或自減變數的語句中時,其區別就很重要。例如,來看以下程式碼:

num =4;
cout << num ++;

這個 cout 語句要做兩件事情:顯示 num 的值,並給 num 的值自增 1。但是先做什麼後做什麼呢?num 先自增與 num 後自增,cout 顯示的值是不一樣的。答案取決於自增運算子的使用模式。

字尾模式會使在表示式中使用變數的值之後發生自增。在該範例中,cout 將顯示 4,然後 num 將被自增到 5。但是,字首模式將使自增先完成。在下面的語句中,mim 將首先自增到 5,然後 cout 將顯示 5:

num = 4;
cout << ++ num;

下面程式通過將自增和自減運算子放在 cout 語句中進一步說明了這些動態變化,這樣可以很容易地看出在使用字首和字尾模式之間的區別。但是,一般不要這樣做。也就是說,在實際的程式設計應用中,不建議在 cout 語句中放置自增或自減運算子。
#include <iostream>
using namespace std;

int main()
{
    int num = 4;
    cout << num << " "; //輸出 4
    cout << num++ << " "; // 輸出 4, 然後num+1
    cout << num << " "; // 輸出5
    cout << ++num << "n"; //先num+1,然後輸出6

    cout << num << " "; // 輸出6
    cout << num-- << " "; //輸出 6,然後num-1
    cout << num << " "; //輸出5
    cout << --num << "n"; //先num-1,然後輸出4
    return 0;
}
程式輸出結果:

4 4 5 6
6 6 5 4