[Código] 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 NULLun 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 newy deletepalabras 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. newY deletepalabras 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 newcon el fin de obtener mayor seguridad Verificar Es de destacar que, si bien newy malloc()son devueltos puntero, pero newfuera del puntero sólo se puede utilizar deleteel reciclaje, y malloc()de las manos sólo pueden utilizar free()reciclado, de lo contrario existe el riesgo de pérdidas de memoria.

106 artículos originales publicados · elogiados 156 · 40,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/Ljnoit/article/details/104835113
Recomendado
Clasificación