El lenguaje C siempre fue distinguido como altamente expresivo y potencialmente muy económico dada su reducida cantidad de palabras clave y el poder de algunos de sus operadores (por ejemplo, de los punteros.) En la actualidad, sin embargo, es frecuente el deseo de soportar estructuras de programación cada vez más complejas (aunque con frecuencia con los mismos algoritmos) con lo cual las implementaciones en lenguaje C tienden a tornarse oscuras (e inseguras) frente a equivalentes en otros lenguajes.
El lenguaje C++ proporciona un gran salto cualitativo frente a C al proporcionar nuevas características útiles en diversos contextos. Por ejemplo, la sobrecarga de operadores dota al lenguaje de una expresividad notable cuando se implementan aplicaciones científico-matemáticas (aunque en otros contextos pueden crear confusión); la sintaxis de clases y objetos permite manipular convenientemente diversas estructuras de datos y operaciones; las excepciones permiten procesar de un modo claro (aunque a veces con más código) los casos de error; los templates se pueden considerar (superficialmente) como macros de precompilador pero con muchas más características, etc. sin embargo, todo esto no ha estado excento de errores, en gran parte causados por mantener la compatibilidad con C (por ejemplo, ver [17]) tanto a nivel de sintaxis de lenguaje (compilación) como durante las etapas de enlace y ejecución.
En suma, el C++ es más expresivo que el C para la mayoría de aplicaciones medianas a grandes, lo cual es de esperarse desde que fue diseñado para abarcar una mayor cantidad de problemas mediante "múltiples paradigmas".