C ++ es un híbrido no porque le permite a uno escribir código de estilo C, sino porque admite varios paradigmas de programación, como procedimientos, orientados a objetos y genéricos. C ++ no te obliga a una sola forma de hacer las cosas, y esa es su fortaleza, porque diferentes problemas pueden resolverse más fácilmente usando diferentes paradigmas.
En mi humilde opinión, sería mejor si el lenguaje / compilador forzara en cierta medida a los programadores a escribir código más elegante.
Entonces primero tienes que definir qué significa elegante . Entonces tendría que ver si su definición de elegante es apropiada para todos los dominios y plataformas problemáticos para los que se utiliza C ++. Un estilo de codificación que sea elegante para escribir un procesador de textos para Windows podría ser completamente inadecuado para escribir un sistema embebido.
Considere escribir código C ++ para ejecutar en un DSP. Primero, el compilador de C ++ para ese DSP puede simplemente no admitir ciertas características de C ++, como las transmisiones. En segundo lugar, la velocidad de la CPU, y posiblemente la memoria, lo limitan severamente, por lo que algunas características de C ++ pueden simplemente afectar su rendimiento. Por ejemplo, es posible que deba evitar las funciones virtuales en aras de la velocidad. Tales consideraciones cambiarían radicalmente su estilo de programación, en comparación con lo que usaría en una PC, y C ++ lo permite.
Para resumir, C ++ es un lenguaje enorme y complicado con muchas características. Hay muchas razones por las cuales cualquier subconjunto de esas características puede no ser aplicable a un proyecto en particular: velocidad, portabilidad, soporte del compilador o incluso experiencia y familiaridad del programador. Por esa razón, el lenguaje para obligar al desarrollador a usar ciertas funciones en lugar de otras para cualquier tarea dada es una mala idea. Piense en Java, donde el lenguaje exige que cada función sea un método de una clase. Hay muchos casos en los que crear una clase solo para ajustar un método es incómodo e innecesario, y sin embargo tienes que hacerlo porque el lenguaje te obliga a hacerlo.