Guia de rastreamento dinâmico Solaris

Precedência

As regras de D para precedência de operador e associação são descritas na tabela seguinte. Essas regras são algo complexas, mas são necessárias para fornecer compatibilidade precisa com as regras de precedência de operador ANSI-C. As entradas da tabela estão na ordem da precedência mais alta para a precedência mais baixa.

Tabela 2–11 Precedência e associação de operador de D

Operadores 

Associação 

() [] -> .

esquerda para direita 

! ~ ++ -- + - * & (tipo) sizeof stringof offsetof xlate

direita para esquerda 

* / %

esquerda para direita 

+ -

esquerda para direita 

<< >>

esquerda para direita 

< <= > >=

esquerda para direita 

== !=

esquerda para direita 

&

esquerda para direita 

^

esquerda para direita 

|

esquerda para direita 

&&

esquerda para direita 

^^

esquerda para direita 

||

esquerda para direita 

?:

direita para esquerda 

= += -= *= /= %= &= ^= |= <<= >>=

direita para esquerda 

,

esquerda para direita 

Existem vários operadores na tabela sobre os quais ainda não discutimos; eles serão abordados nos próximos capítulos:

sizeof

Calcula o tamanho de um objeto (Capítulo 7Structs e uniões)

offsetof

Calcula o deslocamento de um membro de tipo (Capítulo 7Structs e uniões)

stringof

Converte o operando em uma seqüência (Capítulo 6Seqüências)

xlate

Traduz um tipo de dados (Capítulo 40Tradutores)

unary &

Calcula o endereço de um objeto (Capítulo 5Ponteiros e matrizes)

* unário

Cancela a referência de um ponteiro a um objeto (Capítulo 5Ponteiros e matrizes)

-> e .

Acessa um membro de uma estrutura ou tipo de união (Capítulo 7Structs e uniões)

O operador vírgula (,) listado na tabela é para compatibilidade com o operador de vírgula ANSI-C, que pode ser usado para avaliar um conjunto de expressões na ordem da esquerda para direita e retornar o valor da expressão da extrema direita. Este operador é fornecido estritamente para compatibilidade com C e geralmente não deve ser usado.

A entrada (), na tabela de precedência de operador, representa uma chamada a uma função. Exemplos de chamadas a funções como printf() e trace() são apresentados no Capítulo 1Introdução. Uma vírgula também é usada em D para listar argumentos de funções e para formar listas de chaves de matriz associativa. Essa vírgula não é a mesma que o operador vírgula e não garante a avaliação da esquerda para a direita. O compilador de D não garante a ordem de avaliação de argumentos de uma função ou das chaves de uma matriz associativa. Você deve ter cuidado ao usar expressões com efeitos colaterais interativos, tal como o par de expressões i e i++, nestes contextos.

A entrada [] na tabela de precedência de operador representa uma matriz ou referência de matriz associativa. Exemplos de matriz associativa são apresentados no Capítulo 1Introdução. Um tipo especial de matriz associativa chamada agregação é descrito no Capítulo 9Agregações. O operador [] também pode ser usado para indexar matrizes C de tamanho fixo, como descrito no Capítulo 5Ponteiros e matrizes.