La pregunta surgió en una discusión en StackOverflow.
¿Existe una distinción clara entre los dos conceptos fundido y convertido (en relación con el tipo de un objeto), o son estas dos palabras que describen exactamente lo mismo? ¿Qué tal otros lenguajes que no sean C ++, Python y Java? EDITAR : ¿Qué pasa si los tipos en cuestión son los tipos primitivos, como int
a float
?
AbstractSprite
momento sin tener idea de que en realidad es unBigGreenTreeSprite
?Diferentes idiomas definen las palabras "emitir" y "convertir" de manera diferente; No creo que la pregunta tenga sentido más que en referencia a un idioma en particular.
En C, por ejemplo, el término "conversión" se refiere correctamente solo a un operador de conversión explícito, que consiste en un nombre de tipo entre paréntesis que precede a la expresión a convertir. Una "conversión" convierte un valor de un tipo en un valor de otro tipo; Algunas conversiones se implementan reinterpretando los bits que componen la representación, pero se define como una conversión de valor a valor. (Sí, eso es cierto incluso para las conversiones de puntero; es posible que diferentes tipos de puntero tengan diferentes representaciones).
Tenga en cuenta que no hay tal cosa como un "elenco implícito" en C.
Algunas conversiones son explícitas, especificadas por un operador de conversión. Otros son implícitos y se aplican en ciertos casos cuando se usa una expresión de un tipo en un contexto que necesita una expresión de un tipo diferente. La conversión realizada es exactamente la misma en cualquier caso.
Por ejemplo:
C ++ es similar; que tiene los mismos moldes y conversiones como C, y se añade un equivalente de notación funcional a una expresión de conversión de estilo C, además de 4 palabras clave más específicas:
const_cast
,dynamic_cast
,reinterpret_cast
, ystatic_cast
.fuente
(int)1.5-2*(int)(-1.5)
rendimiento 3, 4, 5 o 6, pero si(int)
había sido reemplazado contruncInt
,roundPeriodicInt
,floorInt
, oroundEvenInt
, ...Round
o, en miTrunc
humilde opinión, un diseño mucho más limpio.Durante la conversión, lee la instancia de una clase como si fuera la instancia de otra clase. Podría ser aplicable para este par de clases o no. No hay tiempo de ejecución, excepto la comprobación. A menudo, la posible incompatibilidad se puede detectar en la etapa de compilación.
Durante la conversión, recombina o vuelve a contar los campos de una instancia de una clase en una instancia de otra clase. Si hay una función para ello, podría ser aplicable o no para esta misma instancia. Todo el trabajo se realiza durante el tiempo de ejecución. No se pudo comprobar ningún error durante la compilación.
fuente