C 運算子順序

2021-10-09 19:08:11 字數 1380 閱讀 3203

優先順序

運算子含義

結合方向1::

域運算子

左→右2

()括號,函式呼叫左→右

陣列下標運算子

->

指向成員運算子

.成員運算子

++自增運算子(後置)

- -自減運算子(後置)3++

自增運算子(前置)

右→左- -

自減運算子(前置)

~按位取反運算子

!邏輯非運算子

-負號運算子

+正號運算子

*指標運算子

&取位址運算子

(型別)

型別轉換運算子

sizeof

長度運算子

new動態分配空間運算子

delete

釋放空間運算子

以上均為單目運算子。

優先順序運算子

含義結合方式4*

乘法運算子

左→右/

除法運算子

%求餘運算子5+

加法運算子

左→右-

減法運算子

6<<

按位左移運算子

左→右》

按位右移運算子

7<、<=、>、>=

關係運算子

左→右8

==等於運算子

左→右!=

不等於運算子9&

按位與運算子

左→右10

^按位異或運算子

左→右11

|按位或運算子

左→右12

&&邏輯與運算子

左→右13

||邏輯或運算子

左→右14

? :條件運算子(三目)

右→左15

+、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、!=

賦值運算子

右→左16

throw

丟擲異常運算子

右→左17

,逗號運算子

左→右說明:

同一優先順序的運算子,運算次序由結合方向決定。

比如:-++i 相當於 -(++i)。

不同運算子要求有不同的運算物件個數。條件運算子(? :)是c++中唯一的乙個三目運算子。

大致歸納各類運算子的優先順序:

初等運算子() -> .

↓單目運算子

↓算數運算子(先乘除,後加減)

↓(左移、右移運算子)

↓關係運算子

↓(位運算子)

↓邏輯運算子(不包括!)

↓條件運算子

↓賦值運算子

↓逗號運算子

以上的優先級別由上到下遞減。初等運算子優先順序最高,逗號運算子優先順序最低。

(以上資料來自c++程式設計第3版附錄b)

運算子求值順序

與 兩個運算子的求值順序是非常重要的,因為很多判斷語句都是基於它們擁有一定的求值順序才能正確進行的。eg if num1 0 num2 num1 num2 num1 上面的if 判斷語句合理的運用了 運算子,使之不會出現0做除數的情況 num1 0時 因為 運算子的求值順序是從左到右的,且它有乙個特...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...

C 運算子過載轉換運算子

為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...