¿Es seguro el tipo c y por qué?
Si C se usa correctamente, será mucho más seguro para tipos que C. En comparación con C, C proporciona algunos mecanismos nuevos para garantizar la seguridad de tipos:
(1) El tipo de puntero devuelto por el operador new coincide estrictamente con el objeto, no void *;
( 2) Muchas funciones en C que toman void* como parámetros se pueden reescribir como funciones de plantilla de C, y las plantillas admiten la verificación de tipos
(3) Introduzca la palabra clave const para reemplazar las constantes #define, que tiene tipos y alcances; y las constantes #define son simplemente reemplazos de texto simples;
(4) Algunas macros #define se pueden reescribir como funciones en línea, que pueden admitir múltiples tipos bajo la premisa de seguridad de tipos y, por supuesto, reescribir como plantillas. la seguridad también se puede garantizar;
(5)C proporciona la palabra clave dinámica_cast para hacer que el proceso de conversión sea más seguro, porque dinámica_cast implica una verificación de tipo más específica que static_cast.
Aun así, C no es un lenguaje de programación absolutamente seguro. La seguridad del tipo no se puede garantizar si se usa incorrectamente. Por ejemplo, los siguientes dos ejemplos:
int I = 5;
void * pInt = ampI;
double d=(*(double*) off );
cout lt ltd lt ltendl
El resultado de entrada no es 5, sino un resultado inesperado: -9.25596e 061. Otro ejemplo es:
# include ltiostream gt
Usar espacio de nombres std
Clase principal
{
} ;
clase Niño1: padre público
{
Público:
int I;
Niño1(int e):i(e)
{
}
};
Categoría Hijo2: Padre común
{
Público:
Doble d;
Niño 2 (doble e): d(e)
{
}
};
int main()
{
niño 1 c 1( 5); p>
niño 2 C2(4.1);
Padre * pp
niño 1 * PC 1;
pp = ampc 1;
PC 1 =(child 1 *)PP; //#1 conversión, debido a que el tipo sigue siendo Child1*, no causará un error.
cout lt ltPC 1->;i lt ltendl
pp = ampC2;
PC 1 =(child 1 *)PP //#2 force; conversión y el tipo cambia, esto provocará un error.
cout lt ltPC 1->;i lt ltendl
system("pausa");
return 0;
}
Los resultados son los siguientes:
五
1717986918
Por favor presione cualquier tecla para continuar...