Oracle® Solaris 11.2 Dynamic Tracing Guide

Exit Print View

Updated: July 2014
 
 

Precedence

The D rules for operator precedence and associativity are described in the following table. These rules are somewhat complex, but are necessary to provide precise compatibility with the ANSI-C operator precedence rules. The table entries are in order from highest precedence to lowest precedence.

Table 2-12  D Operator Precedence and Associativity
Operators
Associativity
() [] ->.
left to right
! ~ ++ - + - * & (type) sizeof stringof offsetof xlate
right to left
* / %
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
?:
right to left
= += -= *= /= %= &= ^= ?= <<= >>=
right to left
,
left to right

There are several operators in the table that we have not yet discussed; these will be covered in subsequent chapters:

sizeof
Computes the size of an object (Structs and Unions)
offsetof
Computes the offset of a type member (Structs and Unions)
stringof
Converts the operand to a string (Strings)
xlate
Translates a data type (Chapter 19, Translators)
unary &
Computes the address of an object (Pointers and Arrays)
unary *
Dereferences a pointer to an object (Pointers and Arrays)
-> and .
Accesses a member of a structure or union type (Structs and Unions)

The comma (,) operator listed in the table is for compatibility with the ANSI-C comma operator, which can be used to evaluate a set of expressions in left-to-right order and return the value of the right most expression. This operator is provided strictly for compatibility with C and should generally not be used.

The () entry in the table of operator precedence represents a function call; examples of calls to functions such as printf and trace are presented in Chapter 6, Output Formatting. A comma is also used in D to list arguments to functions and to form lists of associative array keys. This comma is not the same as the comma operator and does not guarantee left-to-right evaluation. The D compiler provides no guarantee as to the order of evaluation of arguments to a function or keys to an associative array. You should be careful of using expressions with interacting side-effects, such as the pair of expressions i and i++, in these contexts.

The [] entry in the table of operator precedence represents an array or associative array reference. Examples of associative arrays are presented in Associative Arrays. A special kind of associative array called an aggregation is described in Chapter 3, Aggregations. The [] operator can also be used to index into fixed-size C arrays as well, as described in Pointers and Arrays.