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.
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 |
'develop > 공통' 카테고리의 다른 글
DualStack Mobile IPv6 with Multiple Care of Address (0) | 2013.06.24 |
---|---|
IPv4, IPv6 체크 정규식 (0) | 2013.04.02 |
웹 표준에 대한 블로그 (0) | 2012.11.26 |
HTML5 변경 점 (0) | 2012.11.26 |
유니코드 한글 음절들 (0) | 2010.02.22 |