tutorial traduccion tekken significado pronunciation pelicula c++ c ogre3d

traduccion - Excepto OOP, ¿qué hace C++ mejor que C



ogre traduccion (9)

Bueno, eso puede sonar como una pregunta trol, pero dado que C ++ parece difícil de dominar por completo (y realmente nunca supe que STL era en realidad "parte" de eso), quería saber cuáles son las desventajas de usar C en lugar de C ++ cuando no se basa mucho en OOP.

C ++ puede tener una sintaxis muy sofisticada a veces, lo que me confunde un poco al tratar de usar OGRE3D, por ejemplo ...


¿Por qué C ++ es mejor que C? Además de la lista obvia de características, en mi opinión la verdadera respuesta es que no hay una buena razón para seguir usando C en lugar de C ++ . Incluso si no usa OOP, puede usarlo como una mejor C. Incluso si usa una sola vez una característica única de C ++ en su programa, C ++ ya es un ganador.

Por otro lado, no hay desventaja en el uso de C ++ : conserva los objetivos de rendimiento de C y es un lenguaje de bajo nivel, al tiempo que permite cosas muy potentes. ¡Y no perderá ninguna característica C usando C ++!

Y no olvide la amplia base de usuarios y las abundantes bibliotecas y marcos disponibles.

Por cierto, C99 ha agregado algunas características interesantes, pero después de una década todavía hay soporte de compilador muy limitado (por lo que está obligado a ANSI C). Mientras tanto, C ++ también evolucionó y los proveedores de compiladores se comprometen a proporcionar implementaciones conformes.


Aparte de los aspectos positivos que notó sepp2k (y estoy de acuerdo con) ciertamente también tiene algunas pequeñas desventajas que no tienen que ver directamente con OO. __VA_ARGS__ viene a la mente la falta de __VA_ARGS__ para el preprocesador y la sensibilidad del contexto. Considera algo como:

switch (argc) { case 1: /* empty statement */; toto T; case 2: break; }

En C, siempre que el compilador encuentra una pieza de código así, y se conocen argc y toto , esto es válido. (Claro que podríamos recibir una advertencia para el T unificado después, de dónde lo usamos).

En C ++ esto depende del tipo toto . Si es un POD, todo está bien (bueno, tan bien como para C). Si tiene un constructor, el código no es válido: saltar a la etiqueta de la caja cruza la inicialización de ''toto T'' .

Entonces, en cierto sentido, para C ++ debe comprender los tipos subyacentes para ver si un flujo de control es válido.


Las características de Non-OO que C ++ tiene que C no:

  1. Plantillas
  2. Sobrecarga de funciones
  3. Referencias
  4. Espacios de nombres
  5. Puede usar struct s y enum s sin escribir struct o enum antes de cada declaración o usar typedefs.
  6. Incluso si no define sus propias clases, utilizar las clases de cadena y contenedor de C ++ sigue siendo a menudo más conveniente y seguro para trabajar que las cadenas y matrices de estilo c.
  7. Tipo de seguridad (aunque algunos lo llamarían débil)
  8. Excepciones
  9. Declaraciones de variables en condicionales, C99 solo lo tiene for

Las referencias se realizan de forma automática y son mucho más seguras en comparación con los punteros, la biblioteca estándar es mucho más extensa, las plantillas hacen que el código sea extremadamente personalizable y sustancialmente más rápido y seguro. C ++ ofrece un fantástico uso / reutilización del código y organización. Además, si no confías demasiado en OOP, entonces lo estás haciendo mal. Hay momentos en que los objetos no son apropiados, pero no son la mayoría de los escenarios.


Puede continuar escribiendo esencialmente el código C, pero compilarlo como C ++ y obtener el beneficio de una verificación de tipo más sólida y, por lo tanto, un código más sólido.

Luego, si desea introducir los elementos útiles de C ++ que no tienen nada que ver con OO, como un bool incorporado, sobrecarga de funciones y un manejo de const mejor definido (no es necesario utilizar macros para los símbolos constantes literales).

No es demasiado exagerado utilizar algunos de los elementos de la biblioteca estándar más fáciles de comprender y usar, como std::string e iostreams, e incluso std :: vector como una "mejor matriz"; no es necesario que aprenda mucho C ++ ni comprenda OOP para aprovechar estas interfaces mejoradas.

Entre OOP una programación de procedimientos hay una Programación basada en Objetos intermedia, que C ++ admite y que es más simple de entender y aprender y casi tan útil como OOP completo. Básicamente utiliza tipos de datos abstractos en lugar de clases completas y evita la herencia y el polimorfismo. Para ser honesto, es lo que muchos programadores de C ++ escriben en cualquier caso.


Soy un gran admirador de C que con el tiempo se ha convertido en un gran fan de C++ . Una de las principales razones es STL (la biblioteca de plantillas estándar ) y Boost .

Entre los dos hace que sea muy fácil escribir potentes aplicaciones portátiles.


Una "característica" que no se ha mencionado mucho (pero creo que es notable) es que la comunidad de compiladores de C ++ parece estar dispuesta a trabajar mucho más para producir implementaciones conformes. Antes, cuando el estándar que finalmente se convirtió en C89 / 90 estaba en funcionamiento, casi todos los proveedores de compiladores trabajaron para cumplir con los últimos borradores del estándar, y (especialmente cuando el estándar estaba cerca de completarse) realmente pusieron mucho trabajo en ajustarse tan de cerca como pudieron

Eso ya no es el caso. El estándar C99 fue (obviamente suficiente) completado hace más de una década, pero básicamente todavía hay una sola implementación que hace un serio intento de conformarse con el estándar completo (Comeau). Algunos otros (por ejemplo, gcc) han agregado algunas características C99, pero todavía faltan muchas otras. One (pcc) se encuentra en la posición más bien paradójica de haber agregado casi todas las características específicas de C99, pero no está muy cerca de cumplir con los requisitos de C89 / 90.

Dada la complejidad de C ++, producir una implementación conforme es una tarea mucho más difícil. A pesar de esto, supongo que ya hay más implementaciones que están por lo menos muy cerca de ajustarse a C ++ 0x (que se ratificará dentro de uno o dos años) que con C99 (ratificado hace aproximadamente una década). Solo para elegir un número arbitrario, esperaría ver 3 implementaciones 1 conformes de C ++ 0x antes que 3 implementaciones conformes de C99 (de hecho, casi esperaría que muchas el día en que sea ratificado).

  1. Por supuesto, "conformar" en este caso significa "hasta un grado práctico" - Estoy bastante seguro de que cada implementación de C y C ++ tiene al menos algunos defectos que impiden la conformidad perfecta . Lo mismo es cierto para la mayoría de los otros idiomas, las únicas excepciones obvias son los idiomas que se definen en términos de una implementación particular.

Una razón para escribir bibliotecas en C es que es muy fácil usar esa biblioteca en todos los idiomas, ya que el C ABI es muy simple, en comparación con el desorden de nombres que es C ++ ABI. La creación de interfaces C para las librerías C ++ puede ser una solución decente, pero si puede expresar su API fácilmente con la sintaxis C, ¿por qué escribirla en C ++ para empezar?

Muchas características de C99 son muy buenas, y aún no están en C ++.


[Nota: esta es una respuesta subjetiva, pero la pregunta en sí misma tiende a invocar respuestas subjetivas por naturaleza].

C ++ es un lenguaje multi-paradigma y hay mucho más que OOP. Sin embargo, sugerir que simplemente es mejor que C es un poco ... audaz. :-D En las manos de un codificador C con experiencia, y para los fines correctos, el código C puede ser muy elegante y simple. Considere el intérprete de Lua que está codificado en C; se compila en un binario muy pequeño que probablemente habría sido mucho más grande, incluso en manos de un programador de C ++ igualmente habilidoso, y por lo tanto, es muy adecuado para el uso integrado. Por lo general, C no será tan seguro (por ej., Conversión implícita, requiere limpieza manual de recursos, etc.) que es algo que C ++ intenta hacer un poco mejor que C, pero tampoco agobiará al programador con una sintaxis de conversión incómoda ( en C ++ uno no debería ser necesario lanzar a menudo, pero en C es bastante común), por ejemplo

Por otro lado, y estoy tratando de hablar de manera muy general, C ++ en realidad puede hacer que sea más fácil escribir un código más eficiente, particularmente para el código que necesita funcionar en varios tipos. Los benchmarks qsort vs std :: sort son un ejemplo clásico de esto y cómo C ++, a través de plantillas y objetos de función inline, puede proporcionar abstracciones sin costo. En C, uno tendría que escribir un algoritmo de clasificación por separado para cada tipo a mano o rellenarlo en una macro para lograr resultados comparables.

La mayoría de los programadores de C ++ que migraron desde C nunca miran hacia atrás. Puede que yo sea un bicho raro, pero todavía encuentro que C es útil para implementar bibliotecas de pequeña escala. Para empezar, es un poco más fácil de portar y construir superrápido. Para este tipo de cosas, tomo el casting implícito por hecho. Sin embargo, odiaría trabajar con cualquier código C a gran escala y lamentablemente tengo que hacer esto de vez en cuando.

En cuanto a las diferencias específicas, sepp2k ya señaló una lista bastante completa.