C++ Operator Precedence

来源:互联网 发布:陈一发儿淘宝店 编辑:程序博客网 时间:2024/05/16 10:23

The operators at the top of this list are evaluated first. Operators within a group have the same precedence. All operators have left-to-right associativity unless otherwise noted.

 

<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;mso-pagination:widow-orphan;font-size:12.0pt;font-family:宋体;mso-bidi-font-family:宋体;}code{mso-ansi-font-size:12.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:宋体;mso-fareast-font-family:宋体;mso-hansi-font-family:宋体;mso-bidi-font-family:宋体;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:612.0pt 792.0pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:36.0pt;mso-footer-margin:36.0pt;mso-paper-source:0;}div.Section1{page:Section1;}-->

Precedence

Operator

Description

Example

Overloadable

Associativity

1

::

Scope resolution operator

Class::age = 2;

no

none

2

()
()
[]
->
.
++
--
const_cast
dynamic_cast
static_cast
reinterpret_cast
typeid

Function call
Member initalization
Array access
Member access from a pointer
Member access from an object
Post-increment
Post-decrement
Special cast
Special cast
Special cast
Special cast
Runtime type information

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<type_to>(type_from);
dynamic_cast<type_to>(type_from);
static_cast<type_to>(type_from);
reinterpret_cast<type_to>(type_from);
cout « typeid(type).name();

yes
yes
yes
yes
no
yes
yes
no
no
no
no
no

left to right

3

!
not
~
compl
++
--
-
+
*
&
new
new []
delete
delete []
(type)
sizeof

Logical negation
Alternate spelling for !
Bitwise complement
Alternate spelling for ~
Pre-increment
Pre-decrement
Unary minus
Unary plus
Dereference
Address of
Dynamic memory allocation
Dynamic memory allocation of array
Deallocating the memory
Deallocating the memory of array
Cast to a given type
Return size of an object or type

if( !done ) …

flags = ~flags;

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;
long *pVar = new long;
MyClass *ptr = new MyClass(args);
delete pVar;
delete [] array;
int i = (int) floatNum;//int size = sizeof(float);

yes

yes

yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
no

right to left

4

->*
.*

Member pointer selector
Member object selector

ptr->*var = 24;
obj.*var = 24;

yes
no

left to right

5

*
/
%

Multiplication
Division
Modulus

int i = 2 * 4;
float f = 10.0 / 3.0;
int rem = 4 % 3;

yes
yes
yes

left to right

6

+
-

Addition
Subtraction

int i = 2 + 3;
int i = 5 - 1;

yes
yes

left to right

7

<<
>>

Bitwise shift left
Bitwise shift right

int flags = 33 << 1;
int flags = 33 >> 1;

yes
yes

left to right

8

<
<=
>
>=

Comparison less-than
Comparison less-than-or-equal-to
Comparison greater-than
Comparison greater-than-or-equal-to

if( i < 42 ) …
if( i <= 42 ) ...
if( i > 42 ) …
if( i >= 42 ) ...

yes
yes
yes
yes

left to right

9

==
eq
!=
not_eq

Comparison equal-to
Alternate spelling for ==
Comparison not-equal-to
Alternate spelling for !=

if( i == 42 ) ...

if( i != 42 ) …

yes
-
yes

left to right

10

&
bitand

Bitwise AND
Alternate spelling for &

flags = flags & 42;

yes

left to right

11

^
xor

Bitwise exclusive OR (XOR)
Alternate spelling for ^

flags = flags ^ 42;

yes

left to right

12

|
bitor

Bitwise inclusive (normal) OR
Alternate spelling for |

flags = flags | 42;

yes

left to right

13

&&
and

Logical AND
Alternate spelling for &&

if( conditionA && conditionB ) …

yes

left to right

14

||
or

Logical OR
Alternate spelling for ||

if( conditionA || conditionB ) ...

yes

left to right

15

? :

Ternary conditional (if-then-else)

int i = (a > b) ? a : b;

no

right to left

16

=
+=
-=
*=
/=
%=
&=
and_eq
^=
xor_eq
|=
or_eq
<<=
>>=

Assignment operator
Increment and assign
Decrement and assign
Multiply and assign
Divide and assign
Modulo and assign
Bitwise AND and assign
Alternate spelling for &=
Bitwise exclusive or (XOR) and assign
Alternate spelling for ^=
Bitwise normal OR and assign
Alternate spelling for |=
Bitwise shift left and assign
Bitwise shift right and assign

int a = b;
a += 3;
b -= 4;
a *= 5;
a /= 2;
a %= 3;
flags &= new_flags;

flags ^= new_flags;

flags |= new_flags;

flags <<= 2;
flags >>= 2;

yes
yes
yes
yes
yes
yes
yes

yes

yes

yes
yes

right to left

17

throw

throw exception

throw EClass(“Message”);

no

18

,

Sequential evaluation operator

for( i = 0, j = 0; i < 10; i++, j++ ) …

yes

left to right

 

原创粉丝点击