C++ 學習筆記 運算子優先順序
原則:
單目運算子》雙目算符》三目運算子;
算數運算子》關係運算符》邏輯運算
移位運算子》關係運算符》位邏輯運算子
括號最高,逗號最低,賦值和複合賦值僅高於逗號運算子
右結合性:先計算右邊再計算左邊:三目和賦值運算子
左側結合性:先計算左邊再計算右邊:其餘運算子
一,賦值運算子
用於修改物件的值。
運算子名 | 語法 | 可過載 |
---|---|---|
加法賦值 | a += b |
是 |
簡單賦值 | a = b |
是 |
減法賦值 | a -= b |
是 |
乘法賦值 | a *= b |
是 |
除法賦值 | a /= b |
是 |
取模賦值 | a%= b |
是 |
逐位與賦值 | a &= b |
是 |
逐位或賦值 | a |= b |
是 |
逐位異或賦值 | a ^= b |
是 |
逐位左移賦值 | a <<= b |
是 |
逐位右移賦值 | a >>= b |
是 |
二.自增/自減運算子
自增/自減運算子增加或減小物件的值
運算子名 | 語法 | 可過載 |
---|---|---|
前自減 | --a |
是 |
後自增 | a++ |
是 |
前自增 | ++a |
是 |
後自減 | a-- |
是 |
三.算術運算子
返回特定算術運算的結果
運算子名 | 語法 | 可過載 |
---|---|---|
一元減 | -a |
是 |
一元加 | +a |
是 |
加法 | a + b |
是 |
減法 | a - b |
是 |
乘法 | a * b |
是 |
除法 | a / b |
是 |
模 | a% b |
是 |
逐位非 | ~a |
是 |
逐位與 | a & b |
是 |
逐位或 | a | b |
是 |
逐位異或 | a ^ b |
是 |
逐位左移 | a << b |
是 |
逐位右移 | a >> b |
是 |
四.邏輯運算子
返回布林運算的結構(關鍵詞形式(and、or、not)和符號形式(&&、||、!)的使用可以互相代替)
運算子名 | 語法 | 可過載 |
---|---|---|
與 | a and b
|
是 |
非 | not a
|
是 |
同或 | a or b
|
是 |
五.比較運算子
比較引數
運算子名 | 語法 | 可過載 |
---|---|---|
不等於 | a!= b |
是 |
等於 | a == b |
是 |
小於 | a < b |
是 |
大於 | a > b |
是 |
小於或等於 | a <= b |
是 |
大於或等於 | a >= b |
是 |
三路比較(C++20) | a <=> b |
是 |
六.成員訪問運算子
運算子名 | 語法 | 可過載 |
---|---|---|
間接定址(由a 所指向的變數) |
*a |
是 |
陣列下標 | a[b] |
是 |
取地址 | &a |
是 |
物件的成員 | a.b |
否 |
指標的成員 | a->b |
是 |
物件的成員指標 | a.*b |
否 |
指標的成員指標 | a->*b |
是 |
七.其他運算子
運算子名 | 語法 | 可過載 |
---|---|---|
逗號 | a, b |
是 |
函式呼叫 | a(a1, a2) |
是 |
條件 | a? b: c |
否 |
八.運算子優先順序
優先順序 |
運算子 |
描述 |
結合性 |
1 |
:: |
作用域解析 |
從左到右 |
2 |
a++a-- |
||
type()type{} |
函式風格轉型 | ||
a() |
函式呼叫 | ||
a[] |
下標 | ||
.-> |
成員訪問 | ||
3 |
++a--a |
從右到左 |
|
+a-a |
|||
!~ |
邏輯非和逐位非 |
||
(type) |
c風格轉型 |
||
*a |
間接(解引用) |
||
&a |
取止 |
||
sizeof |
取大小 | ||
co_await |
await 表示式(C++20) |
||
newnew[] |
動態記憶體分配 | ||
deletedelete[] |
動態記憶體分配 | ||
4 |
.*->* |
成員指標 |
從左到右 |
5 |
a*ba/ba%b |
乘法,除法,取餘 | |
6 |
a+ba-b |
加法,減法 | |
7 |
<<>> |
||
8 |
<=> |
三路比較運算(C++20 起) |
|
9 |
<<= |
||
>>= |
|||
10 |
==!= |
||
11 |
a&b |
逐位與 | |
12 |
^ |
逐位異域(互斥或) |
|
13 |
| |
逐位或(可兼或) |
|
14 |
&& |
邏輯與 | |
15 |
|| |
邏輯或 | |
16 |
a?b:c |
三元條件 |
從右到左 |
throw |
throw運算 | ||
co_yield |
yield 表示式(C++20) |
||
= |
直接賦值(C++ 類預設提供) |
||
+=-= |
|||
*=/=%= |
以積、商及餘數複合賦值 |
||
<<=>>= |
以逐位左移及右移複合賦值 |
||
&=^=|= |
以逐位與、異或及或複合賦值 |
||
17 |
, |
逗號 |
從左到右 |
特殊運算子
static_cast 轉換一個型別為另一相關型別
dynamic_cast 在繼承層級中轉換
const_cast 新增或移除 cv 限定符
reinterpret_cast 轉換型別到無關型別
C 風格轉型 以 static_cast 、 const_cast 及 reinterpret_cast 的混合轉換一個型別到另一型別
new 建立有動態儲存期的物件
delete 銷燬先前由 new 表示式建立的物件,並釋放其所擁有的記憶體區域
sizeof 查詢型別的大小
sizeof... 查詢形參包的大小(C++11 起)
typeid 查詢型別的型別資訊
noexcept 查詢表示式是否能丟擲異常(C++11 起)
alignof 查詢型別的對齊要求(C++11 起)