Operator Precedence and Associativity 

The C++ language includes all C operators and adds several new operators. Operators specify an evaluation to be performed on one of the following:

  • One operand (unary operator)

  • Two operands (binary operator)

  • Three operands (ternary operator)

Operators follow a strict precedence, which defines the evaluation order of expressions containing these operators. Operators associate with either the expression on their left or the expression on their right; this is called "associativity." The following table shows the precedence and associativity of C++ operators (from highest to lowest precedence). Operators in the same segment of the table have equal precedence and are evaluated in the given order in an expression unless explicitly forced by parentheses.

C++ Operator Precedence and Associativity

Operator Name or Meaning Associativity

::

Scope resolution

None

.–>[ ]( )( )++––typeid( )const_castdynamic_castreinterpret_caststatic_cast

Member selection (object) Member selection (pointer) Array subscript Function call member initialization Postfix increment Postfix decrement type name Type cast (conversion) Type cast (conversion) Type cast (conversion) Type cast (conversion)

Left to right Left to right Left to right Left to right Left to right Left to right Left to right Left to right Left to right Left to right Left to right Left to right

sizeof++––~!–+&*newdelete()

Size of object or type Prefix increment Prefix decrement One's complement Logical not Unary minus Unary plus Address-of Indirection Create object Destroy object Cast

Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left

.*–>*

Pointer-to-member (objects) Pointer-to-member (pointers)

Left to right Left to right

*/%

Multiplication Division Modulus

Left to right Left to right Left to right

+–

Addition Subtraction

Left to right Left to right

<<>>

Left shift Right shift

Left to right Left to right

<><=>=

Less than Greater than Less than or equal to Greater than or equal to

Left to right Left to right Left to right Left to right

==!=

Equality Inequality

Left to right Left to right

&

Bitwise AND

Left to right

^

Bitwise exclusive OR

Left to right

|

Bitwise inclusive OR

Left to right

&&

Logical AND

Left to right

||

Logical OR

Left to right

e1?e2:e3

Conditional

Right to left

=*=/=%=+=–=<<=>>=&=|=^=

Assignment Multiplication assignment Division assignment Modulus assignment Addition assignment Subtraction assignment Left-shift assignment Right-shift assignment Bitwise AND assignment Bitwise inclusive OR assignment Bitwise exclusive OR assignment

Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left

throw expr

throw expression

Right to left

,

Comma

Left to right

See Also

Reference

C++ Operators
Operator Overloading