¿Hay alguna diferencia entre conversión de tipo & tipo en C++.¿Hay alguna diferencia entre conversión de tipo y conversión de tipo?
Respuesta
Generalmente, la fundición se refiere a una conversión explícita, ya sea hecho por la conversión de estilo C (T(v)
o (T)v
) o C++ - Reparto estilo (static_cast
, const_cast
, dynamic_cast
, o reinterpret_cast
). La conversión es generalmente un término más genérico que se utiliza para cualquier momento una variable se convierte a otra:
std::string s = "foo"; // Conversion from char[] to char* to std::string
int i = 4.3; // Conversion from float to int
float *f = reinterpret_cast<float*>(&i); // (illegal) conversion from int* to float*
Una de las principales diferencias se produce cuando trabajas con cadenas. No puede decir (int) "234" y obtener el número entero 234. La conversión de tipo generalmente solo funciona en tipos de datos numéricos primitivos.
Tipo de fundición significa que se toma una cadena de bits e interpretar de manera diferente. La conversión de tipo significa que transforma una cadena de bits de una configuración útil en un contexto a una configuración útil en otro.
Por ejemplo, supongamos que yo escribo
int x=65;
char c=(char) x;
char* s=(char*) x;
c contendrá ahora el carácter 'A', porque si reinterpretar el número decimal 65 como un personaje, tengo la letra 'A'. s ahora será un puntero a una cadena de caracteres que resida en la ubicación 65 de la memoria. Esto es casi seguro algo inútil, ya que no tengo idea de qué hay en esa ubicación de la memoria.
itoa(x, s, 10);
es una conversión de tipo. Eso debería darme la cadena "65".
Es decir, con los moldes todavía estamos buscando en la misma ubicación de memoria. Simplemente estamos interpretando los datos allí de manera diferente. Con las conversiones estamos produciendo nuevos datos que se derivan de los datos antiguos, pero no es lo mismo que los datos anteriores.
Entonces, ¿está diciendo que un 'reinterpret_cast' realiza fundición, pero' static_cast' (a pesar de su nombre) realiza la conversión? Lo encontraría más confuso. – jogojapan
Tipo de colada puede hacer una cantidad mínima de conversión:
signed char Schar; // 1 byte (8 bits) to hold 256 values: -128 to 127
unsigned char Uchar; // 1 byte (8 bits) to hold 256 values: 0 to 255
...
if (Schar < -10 ) ... // compiler uses SIGNED comparision
Uchar = Schar; // implicit conversion only copies the 8 bits
Uchar = (char) Schar; // explicit conversion may be required by compiler
if (Uchar > 200) ... // compiler uses UNSIGNED comparision
...OR...
if ((unsigned char) Schar > 200) ... // explicit conversion for UNSIGNED comparision
short Sshort; // 2 bytes (16 bits) to hold 65536 values: -32768 to 32767
unsigned short Ushort; // 2 bytes (16 bits) to hold 65536 values: 0 to 65536
...
// when moving 8 bits into 16 bit variables, what to do with other 8 bits ?
Sshort = (signed short) Uchar; // move 8 bits over and use 0s for other 8 bits
Sshort = (signed short) Schar; // same, but use 1s if negative to make Sshort negative
Pero esto podría ser considerado Tipo de conversión:
float dbl; // 4 bytes to store floating number in IEEE format
long lng; // 4 bytes to store 32 bit integer value in 2's complement format
...
dbl = lng; // convert from 2's comp to IEEE format - all bits change !
dbl = (float) lng; // explicit form
NOTA: int
suele ser el mismo que short
o long
dependiendo del compilador/CPU NOTA: signed
suele ser opcional, ya que suele ser el valor predeterminado
Sin conversión tiene lugar cuando se especifica todas las variables ocupan el mismo espacio de memoria:
typedef union MYUNION // all members occupy same space (memory bytes)
{
signed char Schar; // usual default for char
unsigned char Uchar;
signed short Sshort; // usual default for short
unsigned short Ushort;
signed long Slong; // usual default for long
unsigned long Ulong;
float flt;
double dbl;
};
MYUNION myunion;
myunion.Schar = ... // set variable (memory byte) to value
if ((unsigned char) myunion.Schar > 200) ... // unsigned compare works ok
... is same as (also without moving any data around) ...
if (myunion.Uchar > 200) ... // unsigned compare works ok
... myunion.Sshort ... // other 8 bits are UNASSIGNED GARBAGE !
myunion.Sshort = myunion.Schar; // provide all 16 bits from Schar
... myunion.Sshort ... // Sshort of valid now
myunion.dbl = 12345.0;
... myunion.Ulong ... // has weird value from odd IEEE bit format
myunion.Ulong = (unsigned long) myunion.dbl; // do explicit conversion
... myunion.Ulong ... // has CONVERTED 12345 value
NOTA: *(unsigned long*)&dbl
también produce valores extraños. Lo hace: a) tomar la dirección (ubicación de los bits y bytes) de doble dbl b) considerar la dirección como una dirección de un largo sin signo c) obtener unsigned desde esa ubicación Por supuesto, hay algunas aplicaciones reales de esta técnica. Ejemplos: analizar un archivo binario externo complicado o en CPU con 512 bytes de memoria, etc.
- 1. Conversión de tipo Groovy
- 2. Diferencia entre conversión, análisis y conversión
- 3. Conversión de tipo genérico
- 4. Conversión de tipo implícita de Scala y ==
- 5. Reflexión de Python y conversión de tipo
- 6. Tipo de conversión general clase
- 7. ¿Hay alguna diferencia entre el Cliente tipo de enumeración Tipo y sistema de enumeración
- 8. Herencia y conversión de tipo automático?
- 9. ¿Diferencia entre tipo [] varName y tipo varName []?
- 10. Conversión de tipo genérico FROM cadena
- 11. Java Generics tipo conversión de rompecabezas
- 12. Conversión de tipo general sin riesgo Excepciones
- 13. La conversión de tipo inmediato numérica para numérica tipo genérico
- 14. Preferencia de conversión del tipo de PHP
- 15. Conversión de tipo de C a Java
- 16. ¿Hay alguna diferencia entre el método ToString y la conversión a la cadena?
- 17. Tipo Conversión/Confusión de lanzamiento en C++
- 18. Conversión de tipo implícito en C
- 19. ¿Hay alguna manera de hacer este tipo de conversión en un predicado C#
- 20. Conversión de tipo automático en C#
- 21. Conversión de un BufferedImage a otro tipo
- 22. Agregar bytes con tipo de conversión, Java
- 23. ¿Hay alguna forma de desactivar la conversión de tipo implícita en SQL Server?
- 24. Conversión entre SQL char y C#
- 25. ¿Hay alguna diferencia entre SSLv3 y TLS1.0?
- 26. Tipo de conversión de Y sí provoca error del compilador
- 27. Conversión de tipo y la sobrecarga de métodos
- 28. Conversión de tipo de int y la cadena, java
- 29. conversión explícita y múltiples especificadores de tipo simple
- 30. Operadores C# XOR:^vs^= y conversión de tipo implícita
, por lo que no hay ninguna diferencia correcta –
La diferencia es que un molde es * explícito *. Las palabras clave de C++ se pueden grep'ed. Tanto el elenco C como C++ muestran que la conversión se realizó a propósito y con el consentimiento del programador.Una conversión implícita podría ser intencionada, o por error. – DevSolar