2.8.12 Precedence

Table 2.12, “D Operator Precedence and Associativity” lists the D rules for operator precedence and associativity. 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:

Operators

Description

sizeof

Computes the size of an object (see Section 2.12, “Structs and Unions”)

offsetof

Computes the offset of a type member (see Section 2.12, “Structs and Unions”)

stringof

Converts the operand to a string (see Section 2.11, “Strings”)

xlate

Translates a data type (see Chapter 17, Translators)

unary &

Computes the address of an object (see Section 2.10, “Pointers and Arrays”)

unary *

Dereferences a pointer to an object (see Section 2.10, “Pointers and Arrays”)

-> and .

Accesses a member of a structure or union type (see Section 2.12, “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 Section 2.9.2, “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 Section 2.10, “Pointers and Arrays”.