優先級git
優先級
|
運算符
|
名稱或含義
|
使用形式
|
結合方向
|
說明
|
1
|
[]
|
數組下標
|
數組名[整型表達式]
|
左到右
|
|
()
|
圓括號
|
(表達式)/函數名(形參表)
|
|||
.
|
成員選擇(對象)
|
對象.成員名
|
|||
->
|
成員選擇(指針)
|
對象指針->成員名
|
|||
2
|
-
|
負號運算符
|
-算術類型表達式
|
右到左
|
單目運算符
|
(type)
|
強制類型轉換
|
(純量數據類型)純量表達式
|
|||
++
|
自增運算符
|
++純量類型可修改左值表達式
|
單目運算符
|
||
--
|
自減運算符
|
--純量類型可修改左值表達式
|
單目運算符
|
||
*
|
取值運算符
|
*指針類型表達式
|
單目運算符
|
||
&
|
取地址運算符
|
&表達式
|
單目運算符
|
||
!
|
邏輯非運算符
|
!純量類型表達式
|
單目運算符
|
||
~
|
按位取反運算符
|
~整型表達式
|
單目運算符
|
||
sizeof
|
長度運算符
|
sizeof 表達式
sizeof(類型)
|
|||
3 |
/
|
除
|
表達式/表達式
|
左到右 |
雙目運算符
|
*
|
乘
|
表達式*表達式
|
雙目運算符
|
||
%
|
餘數(取模)
|
整型表達式%整型表達式
|
雙目運算符
|
||
4
|
+
|
加
|
表達式+表達式
|
左到右
|
雙目運算符
|
-
|
減
|
表達式-表達式
|
雙目運算符
|
||
5
|
<<
|
左移
|
整型表達式<<整型表達式
|
左到右
|
雙目運算符
|
>>
|
右移
|
整型表達式>>整型表達式
|
雙目運算符
|
||
6
|
>
|
大於
|
表達式>表達式
|
左到右
|
雙目運算符
|
>=
|
大於等於
|
表達式>=表達式
|
雙目運算符
|
||
<
|
小於
|
表達式<表達式
|
雙目運算符
|
||
<=
|
小於等於
|
表達式<=表達式
|
雙目運算符
|
||
7
|
==
|
等於
|
表達式==表達式
|
左到右
|
雙目運算符
|
!=
|
不等於
|
表達式!= 表達式
|
雙目運算符
|
||
8
|
&
|
按位與
|
整型表達式&整型表達式
|
左到右
|
雙目運算符
|
9
|
^
|
按位異或
|
整型表達式^整型表達式
|
左到右
|
雙目運算符
|
10
|
|
|
按位或
|
整型表達式|整型表達式
|
左到右
|
雙目運算符
|
11
|
&&
|
邏輯與
|
表達式&&表達式
|
左到右
|
雙目運算符
|
12
|
||
|
邏輯或
|
表達式||表達式
|
左到右
|
雙目運算符
|
13
|
?:
|
條件運算符
|
表達式1? 表達式2: 表達式3
|
右到左
|
三目運算符
|
14
|
=
|
賦值運算符
|
可修改左值表達式=表達式
|
右到左
|
|
/=
|
除後賦值
|
可修改左值表達式/=表達式
|
|||
*=
|
乘後賦值
|
可修改左值表達式*=表達式
|
|||
%=
|
取模後賦值
|
可修改左值表達式%=表達式
|
|||
+=
|
加後賦值
|
可修改左值表達式+=表達式
|
|||
-=
|
減後賦值
|
可修改左值表達式-=表達式
|
|||
<<=
|
左移後賦值
|
可修改左值表達式<<=表達式
|
|||
>>=
|
右移後賦值
|
可修改左值表達式>>=表達式
|
|||
&=
|
按位與後賦值
|
可修改左值表達式&=表達式
|
|||
^=
|
按位異或後賦值
|
可修改左值表達式^=表達式
|
|||
|=
|
按位或後賦值
|
可修改左值表達式|=表達式
|
|||
15
|
,
|
逗號運算符
|
表達式,表達式,…
|
左到右
|
從左向右順序結合
|
運算符
|
描述
|
例子
|
可重載性
|
第一級別
|
|||
::
|
做用域解析符
|
Class::age = 2;
|
不可重載
|
第二級別
|
|||
()
|
函數調用
|
isdigit('1')
|
可重載
|
()
|
成員初始化
|
c_tor(int x, int y) : _x(x), _y(y*10){};
|
可重載
|
[]
|
數組數據獲取
|
array[4] = 2;
|
可重載
|
->
|
指針型成員調用
|
ptr->age = 34;
|
可重載
|
.
|
對象型成員調用
|
obj.age = 34;
|
不可重載
|
++
|
後自增運算符
|
for( int i = 0; i < 10; i++ ) cout << i;
|
可重載
|
--
|
後自減運算符
|
for( int i = 10; i > 0; i-- ) cout << i;
|
可重載
|
const_cast
|
特殊屬性轉換
|
const_cast<type_to>(type_from);
|
不可重載
|
dynamic_cast
|
特殊屬性轉換
|
dynamic_cast<type_to>(type_from);
|
不可重載
|
static_cast
|
特殊屬性轉換
|
static_cast<type_to>(type_from);
|
不可重載
|
reinterpret_cast
|
特殊屬性轉換
|
reinterpret_cast<type_to>(type_from);
|
不可重載
|
typeid
|
對象類型符
|
cout « typeid(var).name();
cout « typeid(type).name();
|
不可重載
|
第三級別(具備右結合性)
|
|||
!
|
邏輯取反
|
if( !done ) …
|
可重載
|
not
|
! 的另外一種表達
|
||
~
|
按位取反
|
flags = ~flags;
|
可重載
|
compl
|
~的另外一種表達
|
||
++
|
預自增運算符
|
for( i = 0; i < 10; ++i ) cout << i;
|
可重載
|
--
|
預自減運算符
|
for( i = 10; i > 0; --i ) cout << i;
|
可重載
|
-
|
負號
|
int i = -1;
|
可重載
|
+
|
正號
|
int i = +1;
|
可重載
|
*
|
指針取值
|
int data = *intPtr;
|
可重載
|
&
|
值取指針
|
int *intPtr = &data;
|
可重載
|
new
|
動態元素內存分配
|
long *pVar = new long;
MyClass *ptr = new MyClass(args);
|
可重載
|
new []
|
動態數組內存分配
|
long *array = new long[n];
|
可重載
|
delete
|
動態析構元素內存
|
delete pVar;
|
可重載
|
delete []
|
動態析構數組內存
|
delete [] array;
|
可重載
|
(type)
|
強制類型轉換
|
int i = (int) floatNum;
|
可重載
|
sizeof
|
返回類型內存
|
int size = sizeof floatNum;
int size = sizeof(float);
|
不可重載
|
第四級別
|
|||
->*
|
類指針成員引用
|
ptr->*var = 24;
|
可重載
|
.*
|
類對象成員引用
|
obj.*var = 24;
|
不可重載
|
第五級別
|
|||
*
|
乘法
|
int i = 2 * 4;
|
可重載
|
/
|
除法
|
float f = 10.0 / 3.0;
|
可重載
|
%
|
取餘數(模運算)
|
int rem = 4 % 3;
|
可重載
|
第六級別
|
|||
+
|
加法
|
int i = 2 + 3;
|
可重載
|
-
|
減法
|
int i = 5 - 1;
|
可重載
|
第七級別
|
|||
<<
|
位左移
|
int flags = 33 << 1;
|
可重載
|
>>
|
位右移
|
int flags = 33 >> 1;
|
可重載
|
第八級別
|
|||
<
|
小於
|
if( i < 42 ) …
|
可重載
|
<=
|
小於等於
|
if( i <= 42 ) ...
|
可重載
|
>
|
大於
|
if( i > 42 ) …
|
可重載
|
>=
|
大於等於
|
if( i >= 42 ) ...
|
可重載
|
第九級別
|
|||
==
|
恆等於
|
if( i == 42 ) ...
|
可重載
|
eq
|
== 的另外一種表達
|
||
!=
|
不等於
|
if( i != 42 ) …
|
可重載
|
not_eq
|
!=的另外一種表達
|
||
第十級別
|
|||
&
|
位且運算
|
flags = flags & 42;
|
可重載
|
bitand
|
&的另外一種表達
|
||
第十一級別
|
|||
^
|
位異或運算
|
flags = flags ^ 42;
|
可重載
|
xor
|
^的另外一種表達
|
||
第十二級別
|
|||
|
|
位或運算
|
flags = flags | 42;
|
可重載
|
bitor
|
|的另外一種表達
|
||
第十三級別
|
|||
&&
|
邏輯且運算
|
if( conditionA && conditionB ) …
|
可重載
|
and
|
&&的另外一種表達
|
||
第十四級別
|
|||
||
|
邏輯或運算
|
if( conditionA || conditionB ) ...
|
可重載
|
or
|
||的另外一種表達
|
||
第十五級別(具備右結合性)
|
|||
? :
|
條件運算符
|
int i = (a > b) ? a : b;
|
不可重載
|
第十六級別(具備右結合性)
|
|||
=
|
賦值
|
int a = b;
|
可重載
|
+=
|
加賦值運算
|
a += 3;
|
可重載
|
-=
|
減賦值運算
|
b -= 4;
|
可重載
|
*=
|
乘賦值運算
|
a *= 5;
|
可重載
|
/=
|
除賦值運算
|
a /= 2;
|
可重載
|
%=
|
模賦值運算
|
a %= 3;
|
可重載
|
&=
|
位且賦值運算
|
flags &= new_flags;
|
可重載
|
and_eq
|
&= 的另外一種表達
|
||
^=
|
位異或賦值運算
|
flags ^= new_flags;
|
可重載
|
xor_eq
|
^=的另外一種表達
|
||
|=
|
位或賦值運算
|
flags |= new_flags;
|
可重載
|
or_eq
|
|=的另外一種表達
|
||
<<=
|
位左移賦值運算
|
flags <<= 2;
|
可重載
|
>>=
|
位右移賦值運算
|
flags >>= 2;
|
可重載
|
第十七級別
|
|||
throw
|
異常拋出
|
throw EClass(「Message」);
|
不可重載
|
第十八級別
|
|||
,
|
逗號分隔符
|
for( i = 0, j = 0; i < 10; i++, j++ ) …
|
可重載
|