C++操作符的優先級
C++操作符的優先級
操作符及其結合性
功能
用法
L
L
L ::
::
:: 全局作用域
類作用域
名字空間作用域 ::name
class::name
namespace::name
L
L
L
L
L
.
->
[]
()
()
成員選擇
成員選擇
下標
函數調用
類型構造
object.member
pointer->member
variable[expr]
name(expr_list)
type(expr_list)
R
R
R
R
R
++
--
typeid
typeid
顯示強制類型轉換
後自增操作
後自減操作
類型ID
運行時類型ID
類型轉換
lvalue++
lvalue--
typeid(type)
typeid(expr)
cast_name<type>(expr)
R
R
R
R
R
R
R
R
R
R
R
R
R
R sizeof
sizeof
++
--
~
!
-
+
*
&
()
new
delete
delete[] 對象的大小
類型的大小
前自增操作
前自減操作
位求反
邏輯非
一元負號
一元正號
解引用
取地址
類型轉換
創建對象
釋放對象
釋放數組 sizeof expr
sizeof(type)
++lvalue
--lvalue
~expr
!expr
-expr
+expr
*expr
&expr
(type)expr
new type
delete expr
delete []expr
L
L ->*
.* 指向成員操作的指針
指向成員操作的指針 ptr->*ptr_to_member
obj.*ptr_to_member
L
L
L *
/
% 乘法
除法
求模(求余) expr * expr
expr / expr
expr % expr
L
L +
- 加法
減法 expr + expr
expr - expr
L
L <<
>> 位左移
位右移 expr << expr
expr >> expr
L
L
L
L <
<=
>
>= 小於
小於或等於
大於
大於或等於 expr < expr
expr <= expr
expr > expr
expr >= expr
L
R ==
!= 相等
不等 Expr == expr
Expr != expr
R & 位與 Expr & expr
R ^ 位異或 Expr ^ expr
R | 位或 Expr | expr
R && 邏輯與 Expr && expr
R || 邏輯或 Expr || expr
R ?: 條件操作 Expr ? expr : expr
R
R
R
R
R =
*=,/=,%=
+=,-=
<<=,>>=
&=,|=,^= 賦值操作
符合賦值操作
Lvalue= expr
Lvalue+= expr
……
R throw 拋出異常 Throw expr
L , 逗號 Expr, expr
記憶方法:
--摘自《C語言程序設計實用問答》 -呂鳳翥 呂 濤著
問題:如何記住運算符的15種優先級和結合性?
解答:C語言中運算符種類比較繁多,優先級有15種,結合性有兩種。
如何記憶兩種結合性和15種優先級?下面講述一種記憶方法。
結合性有兩種,一種是自左至右,另一種是自右至左,大部分運算符的結合性是自左至右,只有單目運算符、三目運算符的賦值運算符的結合性自右至左。
優先級有15種。記憶方法如下:
記住一個最高的:構造類型的元素或成員以及小括號。
記住一個最低的:逗號運算符。
剩余的是一、二、三、賦值。
意思是單目、雙目、三目和賦值運算符。
在諸多運算符中,又分為:
算術、關系、邏輯。
兩種位操作運算符中,移位運算符在算術運算符後邊,邏輯位運算符在邏輯運算符的前面。再細分如下:
算術運算符分 *,/,%高於+,-。
關系運算符中,》,》=,《,〈=高於==,!=。
邏輯運算符中,除了邏輯求反(!)是單目外,邏輯與(&&)高於邏輯或(||)。
邏輯位運算符中,除了邏輯按位求反(~)外,按位與(&)高於按位半加(^),高於按位或(|)。
這樣就將15種優先級都記住了,再將記憶方法總結如下:
去掉一個最高的,去掉一個最低的,剩下的是一、二、三、賦值。雙目運算符中,順序為算術、關系和邏輯,移位和邏輯位插入其中。