改型運算符臨時把其操作數(在改型運算符之後)的數據類型改變。這種運算符是由一對括號包著一個數據類型的名稱。它是一個單元運算符,它的操作數在運算符的右邊。
例如,假設 x 是一個整數類型的變量;數式「(float) x」臨時把 x 當作是一個浮點類型的變量。
以下程序舉了一些例子,說明改型運算符是怎樣使用的︰
#include <iostream.h> main() { int a = 17, b = 5; float x, y; char ch = 'A'; // Compare the following: cout << (float) a / b << endl; // 顯示的是 3.4。 cout << a / b << endl; // 顯示的是 3。 x = a / (float) b; // x 儲存的是 3.4。 y = a / b; // y 儲存的是 3。 cout << "x=" << x << " y=" << y << endl; cout << ch << endl; // 顯示的是「A」。 cout << (int) ch << endl; // 顯示的是 65(「A」的 ASCII 碼)。 return 0; } |
除了「=」以外,C++ 有另外十個賦值運算符。以下是其中五個︰
賦值運算符 | 算式範例 | 註釋 |
+= | a += 7 | a = a + 7 |
-= | b -= 3 | b = b - 3 |
*= | c *= 2 | c = c * 2 |
/= | d /= 5 | d = d / 5 |
%= | e %= 4 | e = e % 4 |
所有賦值運算符是雙元的。
一般來說,假設 <運算符> 是「+」、「-」、「*」、「/」或「%」其中一個運算符︰
<變量> <運算符>=
<算式>;
以上形式的語句可以改寫成以下形式︰
<變量> = (<變量>) <運算符> (<算式>);
以下程序用了這些賦值運算符︰
#include <iostream.h> main() { int a, b; char c; a = 14; a -= 3; // a 被賦予的值是 11。 cout << a << endl; b = 7; b += a * 3; // b 被賦予的值是 7 + 11 * 3 = 40。 cout << b << endl; c = 'A'; c += 3; // c 被賦予的值是 'D'。 cout << c << endl; return 0; } |
在大部份的程序語言(包括 Pascal)中,賦值必須使用一個語句去進行,而賦值這運算並沒有回傳任何東西。不過,在 C++ 中,賦值可以當作成算式,而且還可以回傳一個值。因此,一個語句可以有多量的賦值。試看看以下程序︰
include <iostream.h> main() { int a, b, c, d, e; // 首先 b 被賦予的值是 3,然後 a 被賦予的值是 3。 a = b = 3; // 首先 b 被賦予的值是 3*7 = 21,然後 c 被賦予的值是 21。 c = b *= 7; // 首先 d 被賦予的值是 8,然後 c 被賦予的值是 21+8 = 29。 c += d = 8; // 首先 a 被賦予的值是 3+1 = 4,然後 e 被賦予的值是 7*4 = 28。 e = 7 * (a += 1); cout << "a\tb\tc\td\te\n"; cout << a << "\t" << b << "\t" << c << "\t" << d << "\t" << e << endl; return 0; } |
a = b = 3;
在一個多量賦值的語句中,賦值的運算次序是由右至左。因此,賦值「b = 3」最先被執行,而這算式回傳的值是 3。因此跟著被執行的是賦值「a = 3」。
c = b *= 7;
在這語句中,賦值「b *= 7」最先被執行。儲存在
b 的值是 3*7=21,而這也是回傳的值。跟著被執行的賦值是「c = 21」。
c += d = 8;
在這語句中,賦值「d = 8」最先被執行,而回傳的值是
8。跟著賦值「c += 8」被執行,即 21+8=29
會被儲存在 c 中。
e = 7 * (a += 1);
賦值運算的優先次序比乘法為低,因此語句中的括號是不可缺少的。賦值「a += 1」被執行後,3+1=4
會被儲存在 a 中,回傳的值是 4。最後,「e = 7 * 4」被執行,28
被儲存在 e 中。
C++ 提供兩種增值運算符及兩種減值運算符︰
運算符 | 運算符名稱 | 算式範例 | 註釋 |
++<操作數> | 前置增值 | ++a | a 先被增加一,然後使用 a 的新值去計算算式其他部份。 |
<操作數>++ | 後置增值 | b++ | 先用 b 的現有值去計算算式其他部份,然後才把 b 的值增加一。 |
--<操作數> | 前置減值 | --c | c 先被減去一,然後使用 c 的新值去計算算式其他部份。 |
<操作數>-- | 後置減值 | d-- | 先用 d 的現有值去計算算式其他部份,然後才把 d 的值減去一。 |
所有的增值及減值運算符均為單元運算符。從上表得知,前置增值及前置減值運算符的操作數在運算符的右邊,而後置增值及後置減值運算符的操作數在運算符的左邊。
以下程序展示了前置增值及後置增值運算符不同的地方。留意前置減值及後置減值運算符也有對應的特點。
#include <iostream.h> main() { int i = 1, // i 被初始化為 1。 j; cout << i << endl; // 「i++」及「++i」當被用作獨立的語句(不是算式的一部份)時,兩者並無可見的分別。 i++; // i 被增值至 2. cout << i << endl; ++i; // i 被增值至 3. cout << i << endl; j = i++; // j 先被賦予 3,然後 i 才被增值至 4。 cout << "i=" << i << ", j=" << j << endl; j = ++i; // i 先被增值至 5,然後 j 才被賦予 5。 cout << "i=" << i << ", j=" << j << endl; return 0; } |
這些運算符也可用於字符變量及浮點變量。