您的位置:首页 > 编程语言 > C语言/C++

C++ 运算符优先级列表

2010-09-14 13:22 225 查看
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.

PrecedenceOperatorDescriptionExampleOverloadableAssociativity
1
::
Scope resolution operator
Class::age = 2;
noleft to right
2
()
Function call
printf(“Hello world/n”);
yesleft to right
()
Member initalization
c_tor(int x, int y) : _x(x), _y(y * 10) {}
yes
[]
Array access
array[4] = 2;
yes
->
Member access from a pointer
ptr->age = 34;
yes
.
Member access from an object
obj.age = 34;
no
++
Post-increment
for (int i = 0; i < 10; i++) cout << i;
yes
--
Post-decrement
for (int i = 10; i > 0; i--) cout << i;
yes
dynamic_cast
Runtime-checked type conversion
Y& y = dynamic_cast<Y&>(x);
no
static_cast
Unchecked type conversion
Y& y = static_cast<Y&>(x);
no
reinterpret_cast
Reinterpreting type conversion
int const* p = reinterpret_cast<int const*>(0x1234);
no
const_cast
Cast away/Add constness
int* q = const_cast<int*>(p);
no
typeid
Get type information
std::type_info const& t = typeid(x);
no
3
!
Logical negation
if (!done) ...
yesright to left
not
Alternate spelling for
!
~
Bitwise complement
flags = ~flags;
yes
compl
Alternate spelling for
~
++
Pre-increment
for (i = 0; i < 10; ++i) cout << i;
yes
--
Pre-decrement
for (i = 10; i > 0; --i) cout << i;
yes
-
Unary minus
int i = -1;
yes
+
Unary plus
int i = +1;
yes
*
Dereference
int data = *intPtr;
yes
&
Address of
int *intPtr = &data;
yes
sizeof
Size (of the type) of the operand in bytes
size_t s = sizeof(int);
no
new
Dynamic memory allocation
long* pVar = new long;
yes
new []
Dynamic memory allocation of array
long* array = new long[20];
yes
delete
Deallocating the memory
delete pVar;
yes
delete []
Deallocating the memory of array
delete [] array;
yes
(type)
Cast to a given type
int i = (int)floatNum;
yes
4
->*
Member pointer selector
ptr->*var = 24;
yesleft to right
.*
Member object selector
obj.*var = 24;
no
5
*
Multiplication
int i = 2 * 4;
yesleft to right
/
Division
float f = 10.0 / 3.0;
yes
%
Modulus
int rem = 4 % 3;
yes
6
+
Addition
int i = 2 + 3;
yesleft to right
-
Subtraction
int i = 5 - 1;
yes
7
<<
Bitwise shift left
int flags = 33 << 1;
yesleft to right
>>
Bitwise shift right
int flags = 33 >> 1;
yes
8
<
Comparison less-than
if (i < 42) ...
yesleft to right
<=
Comparison less-than-or-equal-to
if (i <= 42) ...
yes
>
Comparison greater-than
if (i > 42) ...
yes
>=
Comparison greater-than-or-equal-to
if (i >= 42) ...
yes
9
==
Comparison equal-to
if (i == 42) ...
yesleft to right
eq
Alternate spelling for ==
!=
Comparison not-equal-to
if (i != 42) ...
yes
not_eq
Alternate spelling for !=
10
&
Bitwise AND
flags = flags & 42;
yesleft to right
bitand
Alternate spelling for &
11
^
Bitwise exclusive OR (XOR)
flags = flags ^ 42;
yesleft to right
xor
Alternate spelling for ^
12
|
Bitwise inclusive (normal) OR
flags = flags | 42;
yesleft to right
bitor
Alternate spelling for |
13
&&
Logical AND
if (conditionA && conditionB) ...
yesleft to right
and
Alternate spelling for &&
14
||
Logical OR
if (conditionA || conditionB) ...
yesleft to right
or
Alternate spelling for ||
15
? :
Ternary conditional (if-then-else)
int i = a > b ? a : b;
noright to left
16
=
Assignment operator
int a = b;
yesright to left
+=
Increment and assign
a += 3;
yes
-=
Decrement and assign
b -= 4;
yes
*=
Multiply and assign
a *= 5;
yes
/=
Divide and assign
a /= 2;
yes
%=
Modulo and assign
a %= 3;
yes
&=
Bitwise AND and assign
flags &= new_flags;
yes
and_eq
Alternate spelling for &=
^=
Bitwise exclusive or (XOR) and assign
flags ^= new_flags;
yes
xor_eq
Alternate spelling for ^=
|=
Bitwise normal OR and assign
flags |= new_flags;
yes
or_eq
Alternate spelling for |=
<<=
Bitwise shift left and assign
flags <<= 2;
yes
>>=
Bitwise shift right and assign
flags >>= 2;
yes
17
throw
throw exception
throw EClass(“Message”);
no
18
,
Sequential evaluation operator
for (i = 0, j = 0; i < 10; i++, j++) ...
yesleft to right
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: