C++自增自减运算符(++和--)用法详解

存储在变量中的值虽然可以增加或减少任何数量,但是将它们自增或自减 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