C ++ est un hybride non pas parce qu'il permet d'écrire du code de style C, mais parce qu'il prend en charge plusieurs paradigmes de programmation, tels que procéduraux, orientés objet et génériques. C ++ ne vous oblige pas à une seule façon de faire les choses, et c'est sa force, car différents problèmes peuvent être résolus plus facilement en utilisant différents paradigmes.
À mon humble avis, il serait préférable que le langage / compilateur oblige dans une certaine mesure les programmeurs à écrire du code plus élégant.
Ensuite, vous devez d'abord définir ce que signifie élégant . Ensuite, vous devriez voir si votre définition d'élégant convient à tous les domaines et plates-formes problématiques pour lesquels C ++ est utilisé. Un style de codage élégant pour l'écriture d'un traitement de texte pour Windows peut ne pas convenir parfaitement à l'écriture d'un système embarqué.
Pensez à écrire du code C ++ pour l'exécuter sur un DSP. Tout d'abord, le compilateur C ++ pour ce DSP peut tout simplement ne pas prendre en charge certaines fonctionnalités C ++, comme les flux. Deuxièmement, vous êtes fortement limité par la vitesse du processeur, et éventuellement la mémoire, de sorte que certaines fonctionnalités C ++ peuvent simplement tuer vos performances. Par exemple, vous devrez peut-être éviter les fonctions virtuelles pour des raisons de vitesse. De telles considérations changeraient radicalement votre style de programmation, par rapport à ce que vous utiliseriez sur un PC, et C ++ le permet.
Pour résumer, C ++ est un langage énorme et compliqué avec beaucoup de fonctionnalités. Il existe de nombreuses raisons pour lesquelles un sous-ensemble de ces fonctionnalités peut ne pas être applicable à un projet particulier: vitesse, portabilité, prise en charge du compilateur, ou même expérience et familiarité du programmeur. Pour cette raison, le langage pour forcer le développeur à utiliser certaines fonctionnalités par opposition à d'autres pour une tâche donnée est une mauvaise idée. Pensez à Java, où le langage exige que chaque fonction soit une méthode d'une classe. Il y a tellement de cas où créer une classe juste pour envelopper une méthode est maladroit et inutile, et pourtant vous devez le faire parce que le langage vous y oblige.