1. 程式人生 > 其它 >C++ 學習筆記 運算子優先順序

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

a&&b

not a

!a

同或 a or b

a||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 起)