Guia de rastreamento dinâmico Solaris

Tipos de conversões

Quando as expressões são construídas por meio de operandos de tipos diferentes mas compatíveis, as conversões de tipo são realizadas para determinar o tipo da expressão resultante. As regras de D para conversões de tipo são as mesmas regras de conversão aritmética em ANSI-C. Essas regras às vezes são chamadas de conversões aritméticas usuais.

Uma forma simples de descrever as regras de conversão é a seguinte: cada tipo de inteiro é classificado na ordem char, short, int, long, long long, sendo que os tipos não assinados correspondentes recebem uma classificação acima de seu equivalente assinado, mas abaixo do próximo tipo inteiro. Quando você constrói uma expressão usando dois operandos inteiros, tais como x + y e os operandos são tipos de inteiros diferentes, o tipo de operando com a classificação mais alta é usado como o tipo de resultado.

Se for necessária uma conversão, o operando de classificação mais baixa é primeiro promovido para o tipo de classificação mais alto. A promoção não altera realmente o valor do operando: ela simplesmente estende o valor para um recipiente maior, de acordo com o seu sinal. Se um operando não assinado for promovido, os bits de ordem alta não utilizados do inteiro resultante serão preenchidos com zeros. Se um operando assinado for promovido, os bits de ordem alta não utilizados serão preenchidos por meio de extensão de sinal. Se um tipo assinado for convertido em um tipo não assinado, o tipo assinado primeiro tem o sinal estendido e, em seguida, é atribuído o novo tipo não assinado determinado pela conversão.

Inteiros e outros tipos também podem ser explicitamente convertidos de um tipo para outro. Em D, os ponteiros e os inteiros podem ser convertidos em quaisquer tipos de inteiro ou de ponteiro, mas não para outros tipos. As regras para conversão e promoção de seqüências e matrizes de caracteres são discutidas no Capítulo 6Seqüências. Uma conversão de inteiro ou ponteiro é formado por meio de uma expressão tal como:

y = (int)x;

onde o tipo de destino é colocado entre parênteses e usado para prefixar a expressão de origem. Inteiros são convertidos em tipos de classificação superior por meio de promoção. Inteiros são convertidos em tipos de classificação quando se zera o excesso de bits de ordem alta do inteiro.

Como D não permite a aritmética de ponto flutuante, nenhuma conversão de operando de ponto flutuante é permitida e nenhuma regra para conversão de ponto flutuante implícita é definida.