tipos que programas programa ejemplos datos completo comandos caracteristicas c++

que - ¿Qué es el C++ moderno?



programa c++ (5)

"Moderno" C ++ no teme usar ninguno o todos los siguientes:

  • RAII
  • contenedores de biblioteca estándar y algoritmos
  • plantillas
  • metaprogramacion
  • excepciones
  • Aumentar

"Antiguo" C ++ tiende a evitar estas cosas debido a una falta percibida de soporte del compilador o rendimiento en tiempo de ejecución. En su lugar, encontrarás ...

  • un montón de new y delete
  • Roll-your-own listas enlazadas y otras estructuras de datos
  • Códigos de retorno como mecanismo para el manejo de errores.
  • una de las millones de clases de cadenas personalizadas que no son std::string

Al igual que con todos los argumentos de esto contra el de, hay dos méritos para ambos enfoques. C ++ moderno no es universalmente mejor. Los entornos incrustados, por ejemplo, a menudo requieren restricciones adicionales que la mayoría de las personas nunca necesitan, por lo que verá muchos códigos antiguos. Sin embargo, en general, creo que encontrará que vale la pena usar la mayoría de las características modernas con regularidad. La ley de Moore y las mejoras del compilador se han ocupado de la mayoría de las razones para evitar las cosas nuevas.

A veces leo la discusión sobre por qué C ++ es bueno o malo y, a veces, uno de los argumentos cita que el C ++ moderno de hoy es muy diferente del antiguo C ++. Me pregunto exactamente cuál sería la diferencia? ¿Cuál sería un ejemplo de C ++ "moderno" y cuál sería un ejemplo (preferiblemente haciendo lo mismo) de este C ++ "antiguo"?


Hay varias cosas en C ++ que se consideran modernas .

En primer lugar, creo, es el extraordinario advenimiento de las plantillas. No solo el STL en sí, sino también los usos menos "regulares" de las plantillas que han llevado al desarrollo de la meta-programación de plantillas. Tenga en cuenta, por ejemplo, la presencia de enable_if en la próxima versión del estándar.

Este es el rasgo más notable que pienso en un movimiento entre los programadores de C ++ que buscan imponer la corrección mediante la construcción:

  • prefiera los errores del compilador a los errores de tiempo de ejecución> templates / type safety en lugar de ellipsis / void*
  • use Scope Bound Resource Management (también conocido como RAII, pero un poco más explícito)

Esta investigación de alta calidad también ha conducido a un uso generalizado de:

  • el STL (algoritmos y estructuras de datos que se han probado exhaustivamente, aunque el diseño del STL es, por desgracia, bastante inseguro)
  • las bibliotecas Boost (revisadas por programadores expertos, casi libres de errores, altamente portátiles)

Revisar estas bibliotecas también demuestra que los programadores de C ++ ya no tienen un complejo de inferioridad hacia esos lenguajes OO: ahora liberados de este complejo, no dudamos en mezclar varios paradigmas (OO, genéricos, de procedimiento) para lograr nuestro objetivo.

En general, creo que el C ++ moderno es más una mentalidad. Nosotros (los programadores de C ++) intentamos liberarnos del temido comportamiento indefinido que nos ha atormentado durante tanto tiempo, y también intentamos liberar a nuestros usuarios (definiendo interfaces que no lo permiten). También aceptamos el hecho de que otros han venido antes y que reutilizar las bibliotecas existentes NO es un signo de debilidad.



Una diferencia muy obvia es que en C ++ "antiguo" verá muchos objetos creados manualmente con new y destruidos con delete . En C ++ moderno, un objeto se crea en la pila siempre que sea posible, o al menos se ajusta dentro de algún tipo de puntero inteligente.

Otra diferencia es que el viejo estilo C ++ se enfoca más en la POO, mientras que el moderno C ++ utiliza una mezcla de estilos de programación: procesal, modular, objeto y genérico. Las funciones gratuitas se consideran algo bueno en el C ++ moderno, mientras que se incluirían en alguna clase del C ++ de estilo antiguo.

Otras diferencias obvias incluyen el uso de construcciones y bibliotecas que se volvieron lo suficientemente maduras y estables para ser utilizadas en el código de producción: plantillas, excepciones, espacios de nombres, STL, etc.


Uso extensivo de la biblioteca estándar y STL, excepciones y plantillas, en lugar de solo C con clases