Non dovrebbe sorprendere più di tanto il fatto che il C++ abbia un'origine simile al C. Lo sviluppo del linguaggio C++ all'inizio degli anni Ottanta è dovuto a Bjarne Stroustrup che, nell'ambito della sua collaborazione con i laboratori Bell, avviò una ricerca per la definizione di un nuovo linguaggio, originariamente noto con il nome di "C with classes" (C con le classi).
Tale scelta fu maturata a seguito della sua precedente esperienza con Simula, uno dei primi linguaggi orientati alla programmazione a oggetti, del quale Stroustrup desiderava incorporare alcune caratteristiche nel liguaggio C al fine di risolvere alcune simulazioni molto rigorose, applicando il paradigma della programmazione a eventi. Per questo tipo di applicazione la scelta della massima efficienza precludeva infatti l'impiego di altri linguaggi.
Bjarne Stroustrup
Nel 1983 il nuovo linguaggio trovò applicazione anche all'esterno del gruppo di lavoro di Stroustrup, grazie al rilascio del primo compilatore apposito Cfront. Fu allora che il nome, su suggerimento del collega Rick Mascitti, venne mutato in C++.
Nel 1987 anche GCC introdusse il supporto a C++ e a pochi anni di distanza, a conferma del suo successo, il nuovo linguaggio venne ufficialmente supportato anche in prodotti commerciali come Turbo C++ di Borland, la cui prima versione risale al 1990.
Al fine di preservare l'uso di molte librerie pre-esistenti ed avvantaggiarsi dell'uso di strumenti di sviluppo già consolidati, originariamente questi non erano dei veri e propri compilatori, ma delle applicazioni di front-end che traducevano codice C++ in C prima della compilazione vera e propria.
Uno dei requisiti fondamentali del C++ era infatti quello di mantenere piena compatibilità con il C.
Tuttavia, un maggiore rigore sul controllo dei tipi ed il supporto della programmazione orientata agli oggetti (Object Oriented Programming: OOP), rese la transizione al C++ da altri linguaggi, più facile di quanto non lo fosse al C.
Ad esempio, C++ ebbe un notevole successo nell'ambito delle applicazioni per il calcolo numerico e scientifico, in cui era tradizionalmente diffuso l'uso di FORTRAN, data la sua elevata efficienza e la possibilità di espandere più agevolmente le funzionalità del software.
Grazie a queste sue caratteristiche, C++ fu quindi caratterizzato da un rapido tasso di adozione, anche se fino al 1990 fu soggetto molteplici e profonde revisioni e modifiche.
Inoltre, la sintassi del linguaggio C, sebbene standard IS0 C89 già nel 1989 (versione conosciuta come "ANSI C"), fu in realtà soggetta a variabilità, dipendentemente dalla piattaforma e dal compilatore utilizzato, fino alla definizione del nuovo standard ISO C99 del 1999.
C++ venne reso uno standard ISO già nel 1998 tramite la redazione di un documento di specifiche che codificava in maniera rigorosa la traduzione dei costrutti da parte dei compilatori, garantendo così al linguaggio una buona portabilità sulla maggior parte delle piattaforme.
Nel 2003 è stata pubblicata una versione riveduta e corretta dello standard che mirava ad eliminare alcune ambiguità nelle specifiche più che apportare modifiche sostanziali.
Tuttavia, il C++ ha continuato ad evolversi, sebbene con una certa inerzia, ed a includere un numero sempre maggiore di costrutti che ne hanno esteso l'applicabilità ad altri paradigmi, oltre che a quello della programmazione orientata agli oggetti, ad esempio la programmazione funzionale.
Nello standard del 2011 infatti sono state introdotte nuove caratteristiche ed il set di istruzioni è stato notevolmente ampliato. L'ultima versione è stata pubblicata nel 2014, con l'introduzione di piccole migliorie rispetto al precendete. Attualmente una nuova versione è in fase di discussione, e la data finale di rilascio è prevista per il 2017.
C++ è quindi un linguaggio in continua evoluzione, la cui compatibilità con il linguaggio C deve essere relegata al solo supporto garantito per la compilazione di applicazioni pre-esistenti o componenti legacy.
L'uso corretto dei costrutti del linguaggio può rendere agevole lo sviluppo di applicazioni complesse e articolate, nonchè portabili su più piattaforme, massimizzando allo stesso tempo l'efficienza durante l'esecuzione e la resilienza del codice all'aggiunta di nuove funzionalità.
L'evoluzione dello standard indica una chiara tendenza all'ampliamento del set di strumenti a disposizione del programmatare, che possano semplificare la scrittura ed il mantenimento del codice. Al fine di acquisire una buona conoscenza del linguaggio C++ è quindi bene tenere a mente che non esistono costrutti equivalenti, nuovi o vecchi, utili o superflui. Tutti insieme essi concorrono nella definizione del linguaggio e delle sue potenzialità e la loro corretta applicazione è ciò che distingue un codice corretto sotto il mero aspetto sintattico e funzionale, da uno robusto ed espandibile.