Expression Rules
C++ has the usual unary operators such as logical negation
(!a
), binary operators such as
addition (a+b
), and even a ternary
operator (a?b:c
). Unlike many other
languages, an array subscript is also an operator (a[b]
), and a function call is an n-ary operator (e.g., a(b
, c
,
d)
).
Every operator has a precedence . Operators with higher precedence are grouped so that
they are logically evaluated before operators with lower precedence.
(Note that precedence determines how the compiler parses the expression,
not necessarily the actual order of computation. For example, in the
expression a( )
+
b( )
*
c(
)
, the multiplication has higher precedence, but a( )
might be called first.)
Some operators group from left to right. For example, the
expression x
/
y
/
z
is equivalent to (x
/
y)
/
z
. Other
operators group right to left, as in x
=
y
=
z
, which
is equivalent to x
=
(y
=
z)
. The order of grouping is called the
operator’s associativity.
When reading C++ expressions, you must be aware of the precedence
and associativity of the operators involved. For example, *ptr++
is read as *(ptr++)
because the postfix ++
operator has higher precedence than the
unary *
operator.
Table 3-1 summarizes the syntax, precedence, and associativity of each kind of expression. The subsections that follow describe the kinds of expressions in depth; each subsection covers a single precedence group.
Group | Associativity | Expression ... |
Get C++ In a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.