18.104.22.168 C and C++ Operators
Operators must be defined on values of specific types. For instance,
+ is defined on numbers, but not on structures. Operators are
often defined on groups of types.
For the purposes of C and C++, the following definitions hold:
- Integral types include
int with any of its storage-class
enum; and, for C++,
- Floating-point types include
long double (if supported by the target platform).
- Pointer types include all types defined as
- Scalar types include all of the above.
The following operators are supported. They are listed here
in order of increasing precedence:
- The comma or sequencing operator. Expressions in a comma-separated list
are evaluated from left to right, with the result of the entire
expression being the last expression evaluated.
- Assignment. The value of an assignment expression is the value
assigned. Defined on scalar types.
- Used in an expression of the form a
and translated to a
= a op b.
= have the same precedence. The operator
op is any one of the operators
- The ternary operator. a
: c can be thought
of as: if a then b else c. The argument a
should be of an integral type.
- Logical or. Defined on integral types.
- Logical and. Defined on integral types.
- Bitwise or. Defined on integral types.
- Bitwise exclusive-or. Defined on integral types.
- Bitwise and. Defined on integral types.
- Equality and inequality. Defined on scalar types. The value of these
expressions is 0 for false and non-zero for true.
- Less than, greater than, less than or equal, greater than or equal.
Defined on scalar types. The value of these expressions is 0 for false
and non-zero for true.
- left shift, and right shift. Defined on integral types.
- The gdb “artificial array” operator (see Expressions).
- Addition and subtraction. Defined on integral types, floating-point types and
- Multiplication, division, and modulus. Multiplication and division are
defined on integral and floating-point types. Modulus is defined on
- Increment and decrement. When appearing before a variable, the
operation is performed before the variable is used in an expression;
when appearing after it, the variable's value is used before the
operation takes place.
- Pointer dereferencing. Defined on pointer types. Same precedence as
- Address operator. Defined on variables. Same precedence as
For debugging C++, gdb implements a use of ‘&’ beyond what is
allowed in the C++ language itself: you can use ‘&(&ref)’
to examine the address
where a C++ reference variable (declared with ‘&ref’) is
- Negative. Defined on integral and floating-point types. Same
- Logical negation. Defined on integral types. Same precedence as
- Bitwise complement operator. Defined on integral types. Same precedence as
- Structure member, and pointer-to-structure member. For convenience,
gdb regards the two as equivalent, choosing whether to dereference a
pointer based on the stored type information.
- Dereferences of pointers to members.
- Array indexing. a
] is defined as
). Same precedence as
- Function parameter list. Same precedence as
- C++ scope resolution operator. Defined on
- Doubled colons also represent the gdb scope operator
(see Expressions). Same precedence as
If an operator is redefined in the user code, gdb usually
attempts to invoke the redefined version instead of using the operator's