La diferencia entre lenguaje C y lenguaje C ++
Este artículo presenta diferencias importantes o fácilmente pasadas por alto entre C y C ++ . Aunque C ++ es casi un superconjunto de C, la mezcla de código C / C ++ generalmente no es un problema, pero comprender las diferencias importantes entre C / C ++ puede evitar algunos errores extraños.
Si eres un OIer con C como lenguaje principal, este artículo también te permitirá comenzar a usar C ++ de manera más fluida.
Diferencia 1-Macro y plantilla
Uno de los usos de las plantillas de C ++ al comienzo del diseño es reemplazar las definiciones de macro. El aprendizaje de la programación de plantillas es un paso importante de C a C ++. La plantilla es diferente del reemplazo de texto de la macro, y obtendrá una verificación más completa del compilador durante la compilación, que es conveniente para escribir código más robusto, y la palabra clave en línea también puede obtener la optimización completa del compilador. La característica de plantilla admite tablas de parámetros de plantilla de longitud variable después de C ++ 11, que se pueden usar para reemplazar funciones de longitud variable en C y garantizar la seguridad de los tipos.
Diferencia de 2 punteros y referencia
Todavía puede usar punteros de estilo C en C ++, pero para pasar variables, es más recomendable usar la función de referencia de C ++ para lograr funciones similares. Dado que el objeto señalado por la referencia no puede ser nulo, puede evitar algunos problemas de acceso de dirección nula. Sin embargo, debido a su flexibilidad, el puntero todavía tiene su uso. Vale la pena mencionar que, c es NULL
un puntero nulo tiene una alternativa con seguridad de tipos en C ++ nullptr
. Entre los punteros y por referencia *
y &
son operadores intercambiables.
Diferencia 3-struct
Aunque tanto C como C ++ tienen el concepto de estructura, ¡sus cosas correspondientes no se pueden mezclar! La estructura en C se usa para describir una estructura de organización de memoria fija , y la estructura en C ++ es una clase . La única diferencia entre ella y la clase es que sus miembros y el comportamiento de herencia son públicos de forma predeterminada , mientras que los miembros predeterminados de las clases generales son privado Esto es especialmente fatal cuando se escribe código mixto C / C ++.
Además, al declarar struct, C ++ no necesita ser tan engorroso como la versión C, C:
typedef struct Node_t{
struct Node_t *next;
int key;
} Node;
Versión C ++
struct Node {
Node *next;
int key;
};
Diferencia 4-const
const solo tiene la función de restringir la variable que no se puede modificar en C, y en C ++, debido a la aparición de una gran cantidad de nuevas características, también se le da más uso a const. El sucesor de const en C a C ++ es constexpr.
Diferencia de asignación de 5 memorias
C ++ en una nueva new
y delete
palabras clave utilizadas para asignar espacio en la "tienda libre", esto puede ser una tienda montón libre también puede ser un área de almacenamiento estático, está en línea con su "clase" y que aparece. El cual delete[]
también puede dirigir la liberación de matriz de memoria dinámica, muy conveniente. new
Y delete
palabras clave llamar al constructor y el destructor tipo, en comparación con el C malloc()
, realloc()
, free()
función, tienen un mejor tipo de apoyo, pero menos eficientes que los de funciones C.
En resumen, si es necesario asignar dinámicamente objeto de memoria es la base de su tipo o una matriz, entonces usted puede utilizar malloc()
una asignación de memoria más eficiente, pero si se crea un nuevo tipo de no-objeto de base, se recomienda su uso new
con el fin de obtener mayor seguridad Verificar Es de destacar que, si bien new
y malloc()
son devueltos puntero, pero new
fuera del puntero sólo se puede utilizar delete
el reciclaje, y malloc()
de las manos sólo pueden utilizar free()
reciclado, de lo contrario existe el riesgo de pérdidas de memoria.