1. 程式人生 > >C++運算子優先順序

C++運算子優先順序

運算子優先順序(級數小的先算)

運算子

描述

例子

可過載性

第一級別

 

 

 

::

作用域解析符

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 &laquo; typeid(var).name();

cout &laquo; 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++ ) …

可過載

 

表格來自百度百科

&nb