| 類別 | 運算符 | 說明 |
|---|---|---|
| 賦值 | = | 賦值 (右→左,lvalue = rvalue) |
+= -= *= /= %= &= |= ^= <<= >>= | 複合賦值 | |
| 算術 | + - * / % | 加減乘除模 (整數/浮點) |
++ -- | 前綴/後綴 自增自減 | |
| 關係 | == != > < >= <= | 返回 bool (true/false) |
| 邏輯 | ! && || | 非、與、或 (短路求值) |
| 條件 | ? : | 三目運算符 cond ? expr1 : expr2 |
| 逗號 | , | 順序求值,取最右值 |
| 位運算 | & | ^ ~ | 與、或、異或、取反 |
<< >> | 左移、右移 | |
| 類型轉換 | (type) expr / type(expr) | C 風格 / 函數式轉型 |
sizeof | sizeof(type) / sizeof expr | 編譯期獲取字節數 |
| 指針/成員 | * & . -> .* ->* | 解引用、取址、成員訪問、成員指針 |
| 作用域 | :: | 作用域解析 (命名空間、類成員、全局) |
| 類型識別 | typeid | RTTI 類型信息 |
| 動態轉型 | dynamic_cast static_cast reinterpret_cast const_cast | C++ 四大轉型運算符 |
| 內存管理 | new delete new[] delete[] | 動態分配/釋放 |
= — 右值賦予左值a = b 將 b 的值拷貝給 a,b 後續改變不影響 a。a = b = c = 5; 等價 c=5; b=c; a=b; (右結合)。a = 2 + (b = 5); // a=7, b=5。5/2=2, -5/2=-2。% 僅用於整數,符號跟隨被除數 (C++11 規定)。int (ASCII 碼)。int a = 5, b;
b = ++a; // a=6, b=6 (先增後用)
b = a++; // a=6, b=5 (先用後增)
// 現代編譯器優化下三者機器碼通常相同
a++; ++a; a+=1; a=a+1;
// 但語義不同,表達式中必須正確選擇
boolbool (true/false)。int (0/1),現代代碼應假設 bool。&& 左假不算右;|| 左真不算右。? :int max = (a > b) ? a : b;
std::cout << (score >= 60 ? "Pass" : "Fail");
可替代簡單 if-else,但嵌套超過兩層可讀性急劇下降。
,int a = (b = 3, b + 2); // a=5, b=3
// 常用於 for 循環多變量控制
for (int i=0, j=10; i
| 符號 | 汇編對應 | 說明 |
|---|---|---|
& | AND | 按位與 |
| | OR | 按位或 |
^ | XOR | 按位異或 |
~ | NOT | 按位取反 (補碼下 ~x = -x-1) |
<< | SHL | 左移 (低位補 0,等價 ×2^n) |
>> | SHR | 右移 (無符號邏輯移位補 0,有符號算術移位補符號位) |
區別: & (位與) vs && (邏輯與)。7 & 8 = 0,7 && 8 = true。
float f = 3.14;
int i = (int)f; // C 風格
int j = int(f); // 函數式 (C++ 風格)
// 進階:static_cast<int>(f) 等四大轉型 (後續章節講解)
sizeof — 編譯期常量sizeof(char) == 1 (定義)。sizeof(int) 通常 4 (32/64 位系統),sizeof(double) == 8。size_t (無符號整數)。| 級別 | 運算符 | 說明 | 結合性 |
|---|---|---|---|
| 1 | :: | 作用域解析 | 左→右 |
| 2 | () [] . -> ++ -- typeid const_cast dynamic_cast reinterpret_cast static_cast | 後綴/類型相關 | 左→右 |
| 3 | ++ -- ~ ! sizeof new delete + - & * | 一元 (前綴自增減、取反、邏輯非、sizeof、new/delete、正負號、取址、解引用) | 右→左 |
| 4 | (type) | C 風格強制轉型 | 右→左 |
| 5 | .* ->* | 成員指針 | 左→右 |
| 6 | * / % | 乘除模 | 左→右 |
| 7 | + - | 加減 | 左→右 |
| 8 | << >> | 移位 | 左→右 |
| 9 | < <= > >= | 關係 | 左→右 |
| 10 | == != | 相等 | 左→右 |
| 11 | & | 按位與 | 左→右 |
| 12 | ^ | 按位異或 | 左→右 |
| 13 | | | 按位或 | 左→右 |
| 14 | && | 邏輯與 | 左→右 |
| 15 | || | 邏輯或 | 左→右 |
| 16 | ? : | 條件 | 右→左 |
| 17 | = += -= *= /= %= &= ^= |= <<= >>= | 賦值/複合賦值 | 右→左 |
| 18 | , | 逗號 | 左→右 |
a = 5 + (7 % 2); 而非靠記憶。i = i++ + ++i; 是 UB。fabs(a-b) < 1e-9。static_cast 等) 而非 C 風格 (type),可被編譯器檢查、搜索更易。if (p && p->valid())。運算符是 C++ 表達式的積木。熟練掌握其語義、優先級、類型轉換規則與副作用,是寫出正確、高效、可維護代碼的基石。