C ++ ist ein Hybrid, nicht weil es das Schreiben von Code im C-Stil ermöglicht, sondern weil es verschiedene Programmierparadigmen unterstützt, z. B. prozedurale, objektorientierte und generische. C ++ zwingt Sie nicht zu einer bestimmten Vorgehensweise, und das ist seine Stärke, da verschiedene Probleme mit unterschiedlichen Paradigmen leichter gelöst werden können.
IMHO wäre es besser, wenn die Programmiersprache / der Compiler die Programmierer zu einem gewissen Grad zwingen würde, eleganteren Code zu schreiben.
Dann muss man erst definieren, was elegant bedeutet. Dann müssten Sie prüfen, ob Ihre Definition von elegant für alle Problemdomänen und -plattformen geeignet ist, für die C ++ verwendet wird. Ein für das Schreiben eines Textverarbeitungsprogramms für Windows eleganter Codierungsstil ist möglicherweise für das Schreiben eines eingebetteten Systems nicht geeignet.
Erwägen Sie, C ++ - Code für die Ausführung auf einem DSP zu schreiben. Erstens unterstützt der C ++ - Compiler für diesen DSP möglicherweise bestimmte C ++ - Funktionen, wie z. B. Streams, nicht. Zweitens sind Sie stark von der CPU-Geschwindigkeit und möglicherweise vom Arbeitsspeicher abhängig, sodass einige C ++ - Funktionen Ihre Leistung beeinträchtigen können. Beispielsweise müssen Sie aus Gründen der Geschwindigkeit möglicherweise virtuelle Funktionen meiden. Solche Überlegungen würden Ihren Programmierstil im Vergleich zu dem, was Sie auf einem PC verwenden würden, radikal verändern, und C ++ ermöglicht dies.
Zusammenfassend ist C ++ eine riesige und komplizierte Sprache mit vielen Funktionen. Es gibt viele Gründe, warum eine Untergruppe dieser Funktionen für ein bestimmtes Projekt möglicherweise nicht anwendbar ist: Geschwindigkeit, Portabilität, Compiler-Unterstützung oder sogar Erfahrung und Vertrautheit der Programmierer. Aus diesem Grund ist es eine schlechte Idee, wenn die Sprache den Entwickler dazu zwingt, bestimmte Funktionen für eine bestimmte Aufgabe zu verwenden, im Gegensatz zu anderen. Denken Sie an Java, wo die Sprache vorschreibt, dass jede Funktion eine Methode einer Klasse sein muss. Es gibt so viele Fälle, in denen das Erstellen einer Klasse nur zum Umbrechen einer Methode umständlich und unnötig ist, und Sie dies dennoch tun müssen, weil die Sprache Sie dazu zwingt.