0% found this document useful (0 votes)
291 views

C++ Operator Precedence - Cppreference

This document describes the precedence and associativity of C++ operators. It lists operators from highest to lowest precedence, with operators at the same precedence level being evaluated left-to-right or right-to-left as indicated. It provides examples to illustrate how expressions with multiple operators are parsed according to precedence rules. It also notes some common operators and their uses in C++.

Uploaded by

Prateek Khare
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
291 views

C++ Operator Precedence - Cppreference

This document describes the precedence and associativity of C++ operators. It lists operators from highest to lowest precedence, with operators at the same precedence level being evaluated left-to-right or right-to-left as indicated. It provides examples to illustrate how expressions with multiple operators are parsed according to precedence rules. It also notes some common operators and their uses in C++.

Uploaded by

Prateek Khare
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

14/11/2013 C++ Operator Precedence - cppreference.

com
en.cppreference.com/w/cpp/language/operator_precedence 1/2
C++ Operator Precedence
The following table lists the precedence and associativity of C++ operators. Operators are listed top to
bottom, in descending precedence.
Precedence Operator Description Associativity
1 :: Scope resolution Left-to-right
2
++ -- Suffix/postfix increment and decrement
() Function call
[] Array subscripting
. Element selection by reference
-> Element selection through pointer
3
++ -- Prefix increment and decrement Right-to-left
+ Unary plus and minus
! ~ Logical NOT and bitwise NOT
(type) Type cast
* Indirection (dereference)
& Address-of
sizeof Size-of
new, new[] Dynamic memory allocation
delete,
delete[]
Dynamic memory deallocation
4 .* ->* Pointer to member Left-to-right
5 * / % Multiplication, division, and remainder
6 + Addition and subtraction
7 << >> Bitwise left shift and right shift
8
< <= For relational operators < and respectively
> >= For relational operators > and respectively
9 == != For relational = and respectively
10 & Bitwise AND
11 ^ Bitwise XOR (exclusive or)
12 | Bitwise OR (inclusive or)
13 && Logical AND
14 || Logical OR
15
?: Ternary conditional Right-to-left
= Direct assignment (provided by default for C++ classes)
+= = Assignment by sum and difference
*= /= %= Assignment by product, quotient, and remainder
<<= >>= Assignment by bitwise left shift and right shift
&= ^= |= Assignment by bitwise AND, XOR, and OR
16 throw Throw operator (for exceptions)
17 , Comma Left-to-right
When parsing an expression, an operator which is listed on some row will be bound tighter (as if by
parentheses) to its arguments than any operator that is listed on a row further below it. For example, the
expressions std::cout<<a&b and *p++ are parsed as (std::cout<<a)&b and *(p++), and not as
std::cout<<(a&b) or (*p)++.
Operators that are in the same cell (there may be several rows of operators listed in a cell) are
evaluated with the same precedence, in the given direction. For example, the expression a=b=c is parsed
as a=(b=c), and not as (a=b)=c because of right-to-left associativity.
An operator's precedence is unaffected by overloading.
Notes
The standard itself doesn't specify precedence levels. They are derived from the grammar.
const_cast, static_cast, dynamic_cast, reinterpret_cast and typeid are not included since they
are never ambiguous.
Y
o
u
r

N
e
w
s
f
e
e
d
14/11/2013 C++ Operator Precedence - cppreference.com
en.cppreference.com/w/cpp/language/operator_precedence 2/2
Some of the operators have alternate spellings (e.g., and for &&, or for ||, not for !, etc.).
See also
Order of evaluation of operator arguments at run time.
Common operators
assignment
increment
decrement
arithmetic logical comparison
member
access
other
a = b
a = rvalue
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b
++a
--a
a++
a--
+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b
!a
a && b
a || b
a == b
a != b
a < b
a > b
a <= b
a >= b
a[b]
*a
&a
a->b
a.b
a->*b
a.*b
a(...)
a, b
(type) a
? :
Special operators
static_cast converts one type to another compatible type
dynamic_cast converts virtual base class to derived class
const_cast converts type to compatible type with different cv qualifiers
reinterpret_cast converts type to incompatible type
new allocates memory
delete deallocates memory
sizeof queries the size of a type
sizeof... queries the size of a parameter pack (since C++11)
typeid queries the type information of a type
noexcept checks if an expression can throw an exception (since C++11)
alignof queries alignment requirements of a type (since C++11)
Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/language/operator_precedence&oldid=63924"
Y
o
u
r

N
e
w
s
f
e
e
d

You might also like