A questão surgiu em uma discussão no StackOverflow.
Existe uma distinção clara entre os dois conceitos expressos e convertidos (a respeito do tipo de um objeto), ou essas duas palavras descrevem exatamente a mesma coisa? E quanto a outras linguagens além de C ++, Python e Java? EDIT : E se os tipos em questão são tipos primitivos, como int
a float
?
AbstractSprite
tempo sem ter idéia de que é realmente umBigGreenTreeSprite
?Idiomas diferentes definem as palavras "converter" e "converter" de maneira diferente; Não acho que a questão seja significativa a não ser em referência a um idioma específico.
Em C, por exemplo, o termo "conversão" refere-se corretamente apenas a um operador de conversão explícito, consistindo em um nome de tipo entre parênteses que precede a expressão a ser convertida. Uma "conversão" converte um valor de um tipo em um valor de outro tipo; algumas conversões são implementadas reinterpretando os bits que compõem a representação, mas é definida como uma conversão de valor em valor. (Sim, isso é verdade mesmo para conversões de ponteiro; é possível que diferentes tipos de ponteiro tenham representações diferentes.)
Observe que não existe uma "conversão implícita" em C.
Algumas conversões são explícitas, especificadas por um operador de conversão. Outros estão implícitos e são aplicados em certos casos quando uma expressão de um tipo é usada em um contexto que precisa de uma expressão de um tipo diferente. A conversão realizada é exatamente a mesma em ambos os casos.
Por exemplo:
C ++ é semelhante; tem os mesmos moldes e conversões como C, e adiciona uma anotação funcional equivalente a uma expressão de conversão de estilo C, mais 4 palavras-chave mais específicas:
const_cast
,dynamic_cast
,reinterpret_cast
, estatic_cast
.fonte
(int)1.5-2*(int)(-1.5)
rendimento de 3, 4, 5 ou 6, mas se(int)
tinha sido substituído comtruncInt
,roundPeriodicInt
,floorInt
ouroundEvenInt
, ...Round
ouTrunc
--IMHO um design muito mais limpo.Durante a transmissão, você lê a instância de uma classe como se fosse a instância de outra classe. Pode ser aplicável a este par de classes ou não. Nenhum trabalho de tempo de execução, exceto a verificação. Muitas vezes, a possível incompatibilidade pode ser detectada no estágio de compilação.
Durante a conversão, você recombina ou reconta campos de uma instância de uma classe em uma instância de outra classe. Se houver uma função para ela, ela pode ser aplicável ou não para essa mesma instância. Todo o trabalho é feito durante o tempo de execução. Nenhum erro pode ser verificado durante a compilação.
fonte