2.7 指派運算子

基本指派 =

= 用來把右邊的值指派給左邊的變數:

#include <iostream>
using namespace std;

int main() {
    int x;
    x = 10;              // x 現在是 10
    x = 20;              // x 改成 20
    x = x + 5;           // x 現在是 25
    cout << x << endl;
    return 0;
}

執行結果:

25

連續指派:a = b = 3

= 可以接連寫好幾個,例如 a = b = 3;。它是從最右邊往左做:先把 3 指派給 b,再把 b(現在是 3)指派給 a,最後 ab 都變成 3。

#include <iostream>
using namespace std;

int main() {
    int a, b;
    a = b = 3;          // 先 b = 3,再 a = b
    cout << a << " " << b << endl;
    return 0;
}

執行結果:

3 3

常用在「一次把好幾個變數設成同一個初始值」。

複合指派運算子

為了簡化 x = x + 5 這類運算,C++ 提供了複合指派運算子:

運算子 等價於 例子(右邊帶運算式才看得出括號的作用)
+= x = x + (...) x += 2 + 3x = x + (2 + 3)
-= x = x - (...) x -= 2 + 3x = x - (2 + 3)不是 x - 2 + 3
*= x = x * (...) x *= 2 + 3x = x * (2 + 3)不是 x * 2 + 3
/= x = x / (...) x /= 2 + 3x = x / (2 + 3)
%= x = x % (...) x %= 2 + 3x = x % (2 + 3)
#include <iostream>
using namespace std;

int main() {
    int score = 80;

    score += 10;        // score = score + 10 = 90
    cout << "After +10: " << score << endl;

    score -= 5;         // score = score - 5 = 85
    cout << "After -5: " << score << endl;

    score *= 2;         // score = score * 2 = 170
    cout << "After *2: " << score << endl;

    score /= 10;        // score = score / 10 = 17
    cout << "After /10: " << score << endl;

    return 0;
}

執行結果:

After +10: 90
After -5: 85
After *2: 170
After /10: 17

動手試試看

用複合指派改寫以下程式,讓程式碼更簡潔:

#include <iostream>
using namespace std;

int main() {
    int num = 100;
    num = num + 25;
    num = num * 2;
    num = num - 50;
    num = num / 5;

    cout << "Final result: " << num << endl;
    return 0;
}