Writing complex expressions with more than a one operands, we may have a number of misgivings about which operand is evaluated foremost and which afterward. |
|
For example, in this appearance: |
|
i = 4 + 3% 2 |
|
we may hesitation if it actually means: |
|
i = 4+ (3% 2) |
i = (4 + 3) % 2 |
|
The right answer is the first of the two expressions, with i answer of 5. |
|
There is an established order with the precedence of each operator, and not only the arithmetic ones but for all the operators which can appear in C++. |
|
From greatest to lowest priority, the priority order is as follows: |
|
Level |
Operator |
Description |
Grouping |
1 |
:: |
scope |
Left-to-right |
2 |
() [] . -> ++ — dynamic_cast static_cast reinterpret_cast const_cast typeid |
postfix |
Left-to-right |
3 |
++ — ~ ! sizeof new delete
*&
+- |
indirection and reference (pointers)
unary sign operator |
Right-to-left |
4 |
(type) |
type casting |
Right-to-left |
5 |
.&->* |
pointer-to-member |
Left-to-right |
6 |
*/% |
multiplicative |
Left-to-right |
7 |
+- |
|
Left-to-right |
8 |
<<>> |
shift |
Left-to-right |
9 |
<><= >= |
relational |
Left-to-right |
10 |
== != |
equality |
Left-to-right |
11 |
& |
bitwise AND |
Left-to-right |
12 |
^ |
|
Left-to-right |
13 |
l |
bitwise OR |
Left-to-right |
14 |
&& |
logical AND |
Left-to-right |
15 |
ll |
logical OR |
Left-to-right |
16 |
?: |
conditional |
Right-to-left |
17 |
= *= /= %= += -= >>= <<= &= ^= != |
|
assignment |
Right-to-left |
18 |
, |
comma |
Left-to-right |
|
|
i = 4 + 3% 2; |
|
might be written either as: |
|
i = 4 + (3 % 2); |
Or |
i = (4 + 3) % 2; |
|
depending on the operation that we want to perform. |