C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Luckas-bot (discussione | contributi)
m r2.7.1) (Bot: Aggiungo: pnb:سی++
m Bot: http → https
 
(379 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{NN|Informatica|maggio 2018|}}
{{Avvisounicode}}
{{Linguaggio di programmazione
Il '''C++''' è un [[linguaggio di programmazione]] [[Programmazione orientata agli oggetti|orientato agli oggetti]], con [[tipizzazione statica]]. È stato sviluppato (in origine col nome di "C con classi") da [[Bjarne Stroustrup]] ai [[Bell Labs|Bell]] Labs nel [[1983]] come un miglioramento del [[linguaggio C]]. Tra i miglioramenti principali troviamo: l'introduzione del [[programmazione orientata agli oggetti|paradigma di programmazione a oggetti]], [[funzioni virtuali]], [[overloading]] degli operatori, [[ereditarietà multipla]], [[Template (programmazione)|template]] e [[gestione delle eccezioni]].
|nome = C++
|immagine = ISO C++ Logo.svg<!-- Solo nome file -->
|didascalia = Logo del linguaggio
|autore =
|data =
|versione =
|utilizzo = Generico
|paradigmi = Multi-paradigma, [[Programmazione procedurale|procedurale]], [[Programmazione funzionale|funzionale]], [[Programmazione orientata agli oggetti|orientato agli oggetti]]
|tipizzazione = Statica
|specifiche =
|estensione = .h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++
|influenzato_da = [[C (linguaggio)|C]], [[Objective-C]], [[Simula]], [[ALGOL]], [[Ada (linguaggio di programmazione)|Ada]], [[CLU (linguaggio)|CLU]], [[ML (linguaggio di programmazione)|ML]]
|ha_influenzato = [[Java (linguaggio di programmazione)|Java]], [[C sharp|C#]], [[Python]], [[Rust (linguaggio di programmazione)|Rust]], [[Perl]], [[PHP]]
}}
 
'''C++''' ([[Alfabeto fonetico internazionale|AFI]]: {{IPA|/ˈsiː plʌs plʌs/|en}}) è un [[linguaggio di programmazione]] ad uso generale creato dall'informatico danese [[Bjarne Stroustrup]]. Pubblicato per la prima volta nel 1985 come estensione del [[C (linguaggio di programmazione)|linguaggio C]], è stato nel tempo esteso notevolmente. Dal 1997 C++ ha caratteristiche per la [[programmazione funzionale]], [[Programmazione generica|generica]] e [[Programmazione orientata agli oggetti|orientata agli oggetti]], oltre a strutture per la gestione a [[Linguaggio di programmazione a basso livello|basso livello]] della [[Memoria (informatica)|memoria]]. Quasi sempre implementato come [[linguaggio compilato]], esistono molti compilatori di C++ creati da varie organizzazioni, tra cui [[Free Software Foundation]], [[LLVM]], [[Microsoft]], [[Intel]], [[Embarcadero Technologies|Embarcadero]], [[Oracle Corporation|Oracle]] e [[IBM]].<ref name="stroustruptcpppl">{{Cita libro|autore=Bjarne Stroustrup|wkautore=Bjarne Stroustrup|titolo=The C++ Programming Language|url=https://archive.org/details/cprogramminglang00stro_0|edizione=3|anno=1997|editore=Addison-Wesley|capitolo=Notes to The Reader|isbn=0-201-88954-4|oclc=59193992}}</ref>
 
C++ fu progettato con in mente la programmazione di [[Sistema embedded|sistemi e software integrati]] o a risorse limitate, presentando come punti salienti prestazioni, efficienza e flessibilità.<ref name=Stroustrup1>{{cita web|url=https://www.youtube.com/watch?v=86xWVb4XIyE|autore=B. Stroustrup|titolo=Lecture:The essence of C++. University of Edinburgh.|data=6 maggio 2014|accesso=12 giugno 2015|urlarchivio=https://web.archive.org/web/20150428003608/https://www.youtube.com/watch?v=86xWVb4XIyE}}</ref> C++ è stato anche ritenuto utile in molti contesti, con i suoi punti di forza nell'infrastruttura e nell'ottimizzazione di risorse limitate,<ref name=Stroustrup1 /> come applicazioni, videogiochi, server (ad esempio [[commercio elettronico]], [[Motore di ricerca|ricerca in rete]] o [[Base di dati|basi dati]]), nonché in applicazioni dove le prestazioni sono critiche, come [[Centralino|centralini telefonici]] o [[Sonda spaziale|sonde spaziali]].<ref name="applications">{{cita web |url=http://www.stroustrup.com/applications.html|titolo=C++ Applications|data=17 febbraio 2014|accesso=5 maggio 2014|autore=Bjarne Stroustrup|urlarchivio=https://web.archive.org/web/20210404065717/https://www.stroustrup.com/applications.html}}</ref>
== Introduzione ==
Il C++ è molto diffuso e apprezzato, ma raramente è usato al massimo delle sue potenzialità: la [[semantica]] del C++ è molto ricca di dettagli e sfumature che condizionano il comportamento del codice, e che molto spesso i [[compilatore|compilatori]] implementano in maniera scorretta o incompleta: molte delle caratteristiche dello standard ISO del linguaggio non sono ancora implementate nei compilatori attuali, anche se la situazione sta migliorando lentamente.
La grande ricchezza semantica del C++, insieme alle librerie che lo accompagnano, lo rende un linguaggio estremamente espressivo e potente, ma che richiede molto tempo per venire appreso e padroneggiato completamente. Inoltre a causa della variabilità del comportamento dei compilatori nel maneggiare le funzioni più avanzate del linguaggio, i programmatori C++ che scelgono di farne uso si rivolgono ad un'architettura (processore, sistema operativo e compilatore) particolare sacrificando la portabilità su altre piattaforme.
 
Bjarne Stroustrup cominciò a lavorare su C++ presso i [[Bell Labs]] dal 1979 per estendere il linguaggio C, con lo scopo di ottenere un linguaggio flessibile ed efficiente come C ma capace di permettere operazioni ad alto livello per l'organizzazione di grandi progetti.<ref name="homepage">{{cita web|titolo=Bjarne Stroustrup's Homepage|url=http://www.stroustrup.com|accesso=15 maggio 2013|urlarchivio=https://web.archive.org/web/20190514123147/http://www.stroustrup.com/}}</ref> A partire dal 1998, C++ è normato dall'[[International Organization for Standardization]] (ISO), che dopo la versione ''ISO/IEC 14882:1998'', nota come [[C++98]], ha pubblicato le versioni [[C++03]], [[C++11]], [[C++14]], e [[C++17]] e [[C++20]] e [[C++23]]. Dal 2012, la distribuzione di nuove versioni segue un piano triennale,<ref>{{Cita web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1000r4.pdf|titolo=C++ IS schedule|accesso=9 agosto 2020|urlarchivio=https://web.archive.org/web/20200810105609/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1000r4.pdf}}</ref> per cui la prossima versione pianificata è [[C++26]].<ref>{{cita web|titolo=C++; Where it's heading|url=https://dzone.com/articles/c-where-is-it-heading-and-what-are-the-new-feature|accesso=3 dicembre 2018|urlarchivio=https://web.archive.org/web/20181203104022/https://dzone.com/articles/c-where-is-it-heading-and-what-are-the-new-feature}}</ref>
Il C++ fu standardizzato nel [[1998]] ([[ISO/IEC 14882]]:1998 "Information Technology - Programming Languages - C++", aggiornato nel [[2003]]). Una nuova versione dello standard (nota informalmente come [[C++0x]]) è in fase di preparazione.
 
== Storia del linguaggio ==
[[File:BjarneStroustrup.jpg|miniatura|[[Bjarne Stroustrup]], autore del linguaggio.]]
[[Bjarne Stroustrup]] iniziò a lavorare al C++ nel [[1979]]. L'idea di creare un nuovo linguaggio ebbe origine nelle sue esperienze di programmazione durante la realizzazione della tesi di laurea. Stroustrup trovò che il [[Simula]] avesse caratteristiche utili per lo sviluppo di grossi progetti software, ma il linguaggio era troppo lento per l'utilizzo pratico, mentre il [[BCPL]] risultava veloce ma troppo a basso livello per lo sviluppo di grosse applicazioni. Quando Stroustrup cominciò a lavorare ai laboratori Bell, gli fu affidato il compito di analizzare il [[kernel]] di [[Unix|UNIX]] in ambito di [[elaborazione distribuita]]. Ricordandosi del lavoro della tesi, decise di aggiungere al linguaggio C alcune delle caratteristiche di Simula. Fu scelto il C perché era un linguaggio per uso generico portabile e veloce. Oltre al C ed al Simula, si ispirò a linguaggi come l'[[ALGOL 68]], [[linguaggio Ada|Ada]], il [[linguaggio CLU|CLU]] ed il [[ML programming language|linguaggio ML]]. Inizialmente, le funzionalità di [[classe (informatica)|classe]], [[ereditarietà (informatica)|classe derivata]], [[strong typing|controllo rigoroso dei tipi]] e argomento di default furono aggiunte al C con [[Cfront]]. La prima versione commerciale fu rilasciata nell'ottobre del [[1985]].<ref>[http://public.research.att.com/~bs/bs_faq.html#invention Stroustrup: FAQ]</ref>
[[Bjarne Stroustrup]] iniziò a lavorare al linguaggio nel [[1979]]. L'idea di creare un nuovo linguaggio ebbe origine nelle sue esperienze di programmazione durante la realizzazione della tesi di laurea. Stroustrup trovò che il [[Simula]] avesse caratteristiche utili per lo sviluppo di grossi progetti software, ma il linguaggio era troppo lento per l'utilizzo pratico, mentre il [[BCPL]] risultava veloce ma troppo a basso livello per lo sviluppo di grosse applicazioni. Quando Stroustrup cominciò a lavorare ai laboratori Bell, gli fu affidato il compito di analizzare il [[kernel]] di [[Unix]] in ambito di [[calcolo distribuito|elaborazione distribuita]]. Ricordandosi del lavoro della tesi, decise di aggiungere al linguaggio C alcune delle caratteristiche di Simula. Fu scelto il C perché era un linguaggio per uso generico [[Portabilità|portabile]] e veloce. Oltre al C ed al Simula, si ispirò a linguaggi come l'[[ALGOL 68]], [[Ada (linguaggio di programmazione)|Ada]], il [[linguaggio CLU|CLU]] ed il [[ML (linguaggio di programmazione)|linguaggio ML]]. Inizialmente, le funzionalità di [[classe (informatica)|classe]], [[ereditarietà (informatica)|classe derivata]], [[Tipizzazione forte|controllo rigoroso dei tipi]] e argomento di default furono aggiunte al C con [[Cfront]]. La prima versione commerciale fu distribuita nell'ottobre del [[1985]].<ref>{{Cita web|url=http://public.research.att.com/~bs/bs_faq.html#invention|titolo=Stroustrup: FAQ|accesso=22 aprile 2006|urlarchivio=https://web.archive.org/web/20120716211550/http://public.research.att.com/~bs/bs_faq.html#invention|dataarchivio=16 luglio 2012|urlmorto=sì}}</ref>
 
Nel 1983 il nome del linguaggio fu cambiato da "C con classi" a C++. Furono aggiunte nuove funzionalità, tra cui ''[[funzione virtuale|funzioni virtuali]]'', ''[[overloading]]'' di funzioni ede [[Operatori in C e C++|operatori]], ''[[reference]]'', costanti, controllo dell'utente della gestione della memoria, ''[[type checking]]'' migliorato e commenti nel nuovo stile ("//"). Nel 1985 fu pubblicata la prima edizione di ''The C++ programming Language'', che fornì un'importante guida di riferimento del linguaggio, che non era ancora stato ufficialmente standardizzato. Nel 1989 fu rilasciatadistribuita la versione 2.0 del C++, le cui novità includono l'''[[ereditarietà multipla]]'', le ''classi astratte'', le ''funzioni membro statiche'', le funzioni membro ''const'', e i ''membri protetti''. Nel 1990 fu pubblicato ''The Annotated C++ Reference Manual'', che fornì le basi del futuro standard. Le ultime aggiunte di funzionalità includono i ''template'', le ''eccezioni'', i ''namespace'', i nuovi tipi di ''[[conversione di tipo|cast]]'' ed il [[booleano (informatica)|tipo di dato booleano]].
 
Così come il linguaggio, anche la libreria standard ha avuto un'evoluzione. La prima aggiunta alla libreria standard del C++ è stata la libreria degli ''[[stream (informatica)|stream]]'' di I/O che forniva servizi sostitutivi della libreria C tradizionale (come [[printf]] e [[scanf]]). In seguito, tra le aggiunte più significative c'è stata la ''[[Standard Template Library]]''.
 
Dopo anni di lavoro, un comitato che presentava membri della [[American National Standards Institute|ANSI]] e della [[International Organization for Standardization|ISO]] hanno standardizzato C++ nel [[1998]] (''[[ISO/IEC 14882]]:1998''). Per qualche anno seguente alalla rilasciopubblicazione ufficiale degli standard, il comitato ha seguito lo sviluppo del linguaggio e ha pubblicato nel [[2003]] una versione corretta dello standard.
 
Risale al [[2005]] ununa reportrelazione tecnicotecnica, chiamatochiamata "Technical Report 1" (abbreviatoin sigla TR1) che, pur non facendo ufficialmente parte dello standard, contiene un numero di estensioni alla libreria standard previste per ladel [[C++0x|successiva versione di C++11]].
 
Non c'è un proprietario del linguaggio C++, che è implementabile senza dover pagare royalty. Il documento di standardizzazione stesso però è disponibile solo a pagamento.
 
=== Il nomeGenesi del linguaggionome ===
La [[Alfabeto fonetico internazionale|pronuncia]] di C++ è [ˌsiː plʌs ˈplʌs] (in inglese). Il nome fu suggerito da [[Rick Mascitti]] alla metà del [[1983]], quando il linguaggio veniva usato per la prima volta al di fuori dei centri di ricerca. Precedentemente il linguaggio si chiamava "C with classes" (C con classi). Il nome è un gioco di parole con un costrutto del C (dove il doppio segno più è l'[[Operatori in C e C++|operatore]] di autoincremento, che incrementa di una unità il valore di una variabile) insieme con la comune convenzione di aggiungere un segno più per indicare una versione potenziata. Secondo Stroustrup: ''«++ è l'operatore di incremento del C [...] il nome esprime la natura evoluzionaria dei cambiamenti dal C»''. Impiegando il [[gioco di parole]] si evita anche il problema che "C+" è già stato usato per un linguaggio senza alcun nesso col C++ (senza menzionare che è comunemente associato con una valutazione poco più che sufficiente in una performance accademica).
La [[Alfabeto fonetico internazionale|pronuncia]] di C++ è [ˌsiː plʌs ˈplʌs] (all'inglese) oppure, come molti italiani dicono, "ci più più" ([ˌʧi pju ˈpju]).
 
Quando, nel 1992, gli furono chieste informalmente spiegazioni sul nome, [[Rick Mascitti]] ha spiegato di aver dato il suggerimento con spirito [[goliardia|goliardico]], e che non pensava che quello sarebbe divenuto il nome formale del linguaggio. Stroustrup ha anche suggerito a posteriori un'interpretazione [[George Orwell|orwelliana]] del nome, in riferimento al "Dizionario C" della [[Neolingua]] - nel romanzo il dizionario dei termini tecnici, unico residuo di un linguaggio scientifico - descritto nell'appendice di ''[[1984 (romanzo)|1984]]'' e al prefisso ''doubleplus'' (''arcipiù'' nell'edizione italiana), utilizzato in Neolingua per il superlativo. Benché non fedelissimo alla sintassi fittizia definita nel romanzo con estrema precisione, il nome suonerebbe come "C-issimo" e connoterebbe comunque il C++ come intenso miglioramento del C.<ref>{{cita libro| Bjarne | Stroustrup | C++ - Linguaggio, libreria standard, principi di programmazione | 2000 | Addison-Wesley | | capitolo="Note al lettore"}}</ref>
Il nome fu suggerito da Rick Mascitti alla metà del [[1983]], quando il linguaggio veniva usato per la prima volta al di fuori dei centri di ricerca.
Precedentemente il linguaggio si chiamava "C with classes" (C con classi).
 
== Descrizione ==
Il nome è un gioco di parole con un costrutto del C (dove il doppio segno più è un operatore che ha l'effetto di incrementare il valore di una variabile) insieme con la comune convenzione di aggiungere un segno più per indicare una versione potenziata. Secondo Stroustrup: ''«++ è l'operatore di incremento del C... il nome esprime la natura evoluzionaria dei cambiamenti dal C»''. Impiegando il gioco di parole si evita anche il problema che "C+" è già stato usato per un linguaggio senza alcun nesso col C++ (senza menzionare che è comunemente associato con una valutazione poco più che sufficiente in una performance accademica).
 
=== Linguaggio ===
Quando furono chieste informalmente spiegazioni sul nome a [[Rick Mascitti]] nel 1992, ha spiegato che diede il suggerimento con spirito goliardico, e che non pensava che sarebbe divenuto il nome formale del linguaggio.
La prima parte dello [[Norma tecnica|standard]] definisce le caratteristiche fondamentali del linguaggio<ref>{{Cita libro|lingua=en|autore=Bjarne Stroustrup|titolo=The C++ Programming Language, 4th Edition|capitolo=2.2 The Basics}}</ref>. Lo standard suddivide questa parte in argomenti<ref>{{Cita web|lingua=en|url=https://www.iso.org/standard/83626.html|titolo=ISO/IEC 14882:2024 Programming languages — C++|accesso=23 aprile 2025}}</ref><ref>{{Cita web|lingua=en|url=https://www.iso.org/obp/ui/en/#iso:std:iso-iec:14882:ed-7:v1:en|titolo=ISO/IEC 14882:2024(en) Programming languages — C++|accesso=23 aprile 2025}}</ref>:
 
* la dichiarazione e definizione delle [[Variabile (informatica)|variabili]], incluso il loro ciclo di vita, come sono modellate in memoria e i tipi fondamentali
Stroustrup ha anche suggerito a posteriori un'interpretazione più "[[George Orwell|orwelliana]]" del nome, in riferimento al "Dizionario C" della [[Neolingua]] (nel romanzo il dizionario dei termini tecnici, unico residuo di un linguaggio scientifico) descritto nell'appendice di [[1984 (romanzo)|1984]] e al prefisso ''doubleplus'' (''arcipiù'' nell'edizione italiana), utilizzato in Neolingua per il superlativo. Benché non fedelissimo alla sintassi fittizia definita nel romanzo con estrema precisione, il nome suonerebbe come "C-issimo" e connoterebbe comunque il C++ (forse aggiungendo una sfumatura di disumana efficienza) come intenso miglioramento del C. <ref>{{cita libro| Bjarne | Stroustrup | C++ - Linguaggio, libreria standard, principi di programmazione | 2000 | Addison-Wesley | | capitolo="Note al lettore"}}</ref>
* le [[Espressione (informatica)|espressioni]] e la loro grammatica, come si definiscono, come si compongono (per esempio usando gli [[Operatori in C e C++|operatori]]) e come avvengono le conversioni tra di loro
* le [[Struttura di controllo|strutture di controllo]] quali ad esempio if, for, while, break, return
* dichiarazioni e inizializzatori in generale: [[Funzione (informatica)|funzioni]], enum, [[namespace]], attributi e gli specificatori come [[Allocazione statica della memoria|static]], friend e inline
* i moduli
* le [[Classe (informatica)|classi]]
* [[Overloading|overload]] di funzioni e operatori
* i [[Programmazione generica|template]]
* le [[Eccezione (informatica)|eccezioni]]
* le direttive del [[preprocessore]]
 
La sintassi di base del C++ è un'estensione di quella del linguaggio C<ref name="c_comp">{{Cita libro|lingua=en|autore=Bjarne Stroustrup|titolo=The C++ Programming Language, 4th Edition|capitolo=44.3 C/C++ Compatibility|citazione=With minor exceptions, C++ is a superset of C}}</ref>. Alcuni punti in cui le differenze sono visibili sono la presenza di numerose parole chiave specifiche del linguaggio C++ e l'utilizzo di funzionalità specifiche come i template e i reference rvalue<ref>{{Cita libro|lingua=en|autore=Bjarne Stroustrup|titolo=The C++ Programming Language, 4th Edition|capitolo=44.3.1 C and C++ Are Siblings, 44.3.3 C Code That Is Not C++}}</ref>.
== La libreria standard ==
Lo [[standard]] del C++ del [[1998]] consiste di due parti: il nucleo del linguaggio e la [[C++ standard library|libreria standard]] del C++; quest'ultima include la maggior parte della [[Standard Template Library]] ed una versione della libreria standard del C leggermente modificata per un uso più comodo.
Esistono molte librerie per il C++ che non fanno parte dello standard; ed è possibile, usando il linking esterno, utilizzare anche le librerie scritte per il linguaggio C.
 
Lo stile di programmazione (definito anche come paradigma)<ref name="multi_p">{{Cita libro|lingua=en|autore=Bjarne Stroustrup|titolo=The C++ Programming Language, 4th Edition|capitolo=1.2.1 Programming Style}}</ref> supportato dal C++ non è unico. Si può scrivere codice usando uno stile [[Programmazione procedurale|procedurale]] o basato sull'astrazione dei dati (mediante l'uso di interfacce) od orientato agli [[Programmazione orientata agli oggetti|oggetti]] o in stile [[Programmazione generica|generico]]<ref name="multi_p"/>. La possibilità di utilizzare oggetti come funzioni sin da C++98 permette di utilizzare anche lo stile [[Programmazione funzionale|funzionale]], cosa facilitata dalle funzionalità aggiunte da C++11 e versioni successive<ref>{{Cita libro|lingua=en|autore=Ivan Cukic|titolo=Functional Programming in C++|capitolo=1.5 Evolution of C++ as a functional programming language}}</ref>.
La STL era in origine una libreria di terze parti, sviluppata da [[Hewlett Packard|HP]] ed in seguito da [[Silicon Graphics]], prima che venisse incorporata nel C++ standard. Lo standard non si riferisce ad essa come alla "STL", poiché è semplicemente parte della libreria completa, ma molti continuano ad usare il termine per distinguerla dal resto della libreria (come flussi di I/O, internazionalizzazione, funzioni diagnostiche, ecc.)
 
=== Libreria standard ===
La maggior parte dei compilatori fornisce anche un'implementazione della libreria standard, STL compresa. Esistono anche versioni indipendenti dal compilatore della STL, come ad esempio la [[STLPort]].<ref>[http://www.stlport.org STLport: Welcome!<!-- Titolo generato automaticamente -->]</ref>
La seconda parte dello standard del C++ riguarda la [[Libreria standard C++|libreria standard]]; quest'ultima è un insieme di componenti<ref>{{Cita libro|lingua=en|autore=Nicolai M. Josuttis|titolo=C++ Standard Library, The: A Tutorial and Reference, 2nd Edition|capitolo=1.3. Style and Structure of the Book|citazione=The C++ standard library provides components that are somewhat, but not totally, independent of one another}}</ref> di cui una porzione importante è la [[Standard Template Library]] (STL)<ref>{{Cita libro|lingua=en|autore=Nicolai M. Josuttis|titolo=C++ Standard Library, The: A Tutorial and Reference, 2nd Edition|capitolo=1.3. Style and Structure of the Book|citazione=There is no doubt that the STL is the most powerful, most complex, and most exciting part of the library}}</ref>. La STL era in origine una libreria di terze parti, sviluppata da [[Hewlett-Packard|HP]] e in seguito da [[Silicon Graphics]], prima che venisse incorporata nel C++ standard. Lo standard non si riferisce a essa come alla "STL", poiché è semplicemente parte della libreria completa, ma molti continuano a usare il termine<ref>{{Cita libro|lingua=en|autore=Marc Gregoire|titolo=Professional C++, 5th Edition|capitolo=16 Overview of the C++ Standard Library|citazione=The heart of the C++ Standard Library is its generic containers and algorithms. Some people still call this subset of the library the Standard Template Library, or STL for short, because originally it was based on a third-party library called the Standard Template Library, which used templates abundantly. However, STL is not a term defined by the C++ standard itself}}</ref> per distinguerla dal resto della libreria (come flussi di I/O, internazionalizzazione, funzioni diagnostiche, ecc.).
 
Molti compilatori forniscono anche un'implementazione della libreria standard. Esistono anche versioni indipendenti dal compilatore della STL, come ad esempio la [[STLPort]].<ref>{{Cita web |url=http://www.stlport.org|titolo=STLport: Welcome!<!-- Titolo generato automaticamente -->}}</ref>
== Compilatori ==
Alcuni compilatori per C++ sono: [[GNU Compiler Collection|GCC]] (disponibile per molte piattaforme diverse), [[MinGW]] ([[porting]] di GCC per [[Microsoft Windows|Windows]]) e [[DJGPP]]. Oltre a questi ci sono i compilatori commerciali come [[VisualC++]] e il compilatore di [[Borland]] [[C++ Builder]].
Anche se il C non è un sottoinsieme del C++ nel senso più stretto della parola, è possibile compilare in C++ molti programmi scritti in C.
 
Esistono molte librerie per il C++ che non fanno parte dello standard ed è possibile, con il meccanismo della convenzione di linkage extern "C"<ref>{{Cita libro|lingua=en|autore=Bjarne Stroustrup|titolo=The C++ Programming Language, 4th Edition|capitolo=15.2.5 Linkage to Non-C++ Code}}</ref>, utilizzare anche le librerie scritte per il linguaggio C.
; Vecchi problemi
Tradizionalmente i compilatori C++ hanno avuto un certo numero di problemi. Lo standard del C++ non specifica l'implementazione della [[decorazione dei nomi]], della [[gestione delle eccezioni]] e altre funzioni specifiche dell'implementazione, e ciò rende incompatibile il [[codice oggetto]] prodotto da compilatori diversi. Ci sono però standard di terze parti per particolari macchine o sistemi operativi che cercano di standardizzare i compilatori per tali piattaforme, ad esempio l'[http://www.codesourcery.com/cxx-abi/ ABI per C++], ed ora molti compilatori hanno standardizzato questi elementi.
 
=== Compilatori ===
Per molti anni i diversi compilatori hanno implementato lo standard del C++ con diversi livelli di correttezza, in particolare la [[specializzazione parziale dei template]]. Le versioni recenti dei compilatori più usati supportano quasi tutto lo standard del C++ del 1998.
Esistono svariati [[compilatori]] per C++<ref>{{Cita web|lingua=en|url=https://isocpp.org/get-started|titolo=Get Started!|accesso=23 aprile 2025}}</ref> che supportano lo standard a diversi livelli di completezza<ref name="comp_sup">{{Cita web|lingua=en|url=https://en.cppreference.com/w/cpp/compiler_support|titolo=C++ compiler support|accesso=23 aprile 2025}}</ref>. Tra i progetti [[Software libero|free software]]/[[open source]], esistono [[GNU Compiler Collection|GCC]]<ref>{{Cita web|lingua=en|url=https://gcc.gnu.org/|titolo=GCC, the GNU Compiler Collection|accesso=23 aprile 2025}}</ref> (supporta numerose combinazioni di [[Sistema operativo|sistemi operativi]] e [[Instruction set|architetture]]) e [[Clang]]<ref>{{Cita web|lingua=en|url=https://clang.llvm.org/|titolo=Clang: a C language family frontend for LLVM|accesso=23 aprile 2025}}</ref> (a sua volta disponibile per molte piattaforme diverse, tra cui una versione per [[MacOS]] inclusa nell'[[Ambiente di sviluppo integrato|IDE]] [[Xcode|XCode]]<ref>{{Cita web|lingua=en|url=https://developer.apple.com/xcode/|titolo=Xcode|accesso=23 aprile 2025}}</ref> di [[Apple]]). Esistono inoltre implementazioni [[Software proprietario|proprietarie]] come [[VisualC++|Visual C++]]<ref>{{Cita web|url=https://visualstudio.microsoft.com/it/vs/features/cplusplus/|titolo=Visual Studio IDE C/C++ e compilatore per Windows|accesso=23 aprile 2025}}</ref> per [[Microsoft Windows]], [[NVIDIA|Nvidia]] HPC C++<ref>{{Cita web|lingua=en|url=https://developer.nvidia.com/hpc-sdk|titolo=NVIDIA HPC SDK|accesso=23 aprile 2025}}</ref> e [[Hewlett Packard Enterprise|HPE]] Cray CCE<ref>{{Cita web|lingua=en|url=https://cpe.ext.hpe.com/docs/latest/cce/index.html#cce|titolo=Cray Compiler Environment|accesso=23 aprile 2025}}</ref>. Svariate versioni di compilatori basate su Clang/[[LLVM]] sono disponibili da compagnie come [[IBM]] con [[XL C/C++]]<ref>{{Cita web|lingua=en|url=https://www.ibm.com/products/c-and-c-plus-plus-compiler-family|titolo=IBM C and C++ Compiler Family|accesso=23 aprile 2025}}</ref> (per [[AIX (sistema operativo)|AIX]], [[Linux]], [[z/OS]], [[IBM Z|z/VM]]), [[Intel]] con oneAPI DPC++/C++ Compiler<ref>{{Cita web|lingua=en|url=https://www.intel.com/content/www/us/en/developer/tools/oneapi/dpc-compiler.html|titolo=oneAPI DPC++/C++ Compiler|accesso=23 aprile 2025}}</ref> e [[Embarcadero Technologies|Embarcadero]] C++ Compiler<ref>{{Cita web|lingua=en|url=https://www.embarcadero.com/free-tools/ccompiler|titolo=C++ Compiler|accesso=23 aprile 2025}}</ref>.
 
Lo standard del C++ non specifica l'implementazione della [[decorazione dei nomi]], della [[gestione delle eccezioni]] e altre funzioni specifiche dell'implementazione, e ciò rende incompatibile il [[codice oggetto]] prodotto da compilatori diversi. Ci sono però standard di terze parti per particolari macchine o sistemi operativi che cercano di standardizzare i compilatori per tali piattaforme, ad esempio l'ABI per C++<ref>{{Cita web|url=https://mentorembedded.github.io/cxx-abi/|titolo=C++ ABI|sito=mentorembedded.github.io|accesso=7 maggio 2018}}</ref>, e successivamente molti compilatori hanno standardizzato questi elementi.
== Programmi di esempio ==
 
Per molti anni i diversi compilatori hanno implementato lo standard del C++ con diversi livelli di correttezza, in particolare la [[specializzazione parziale dei template]]. Le versioni recenti dei compilatori più usati supportano quasi tutto lo standard [[C++20]]<ref name="comp_sup"/>.
=== Hello, world! ===
 
{{Vedi anche|Hello world}}
=== Operatori ===
Esempio del programma ''hello world'' che utilizza la [[libreria standard C++]] (non l'STL), il flusso di output ''cout'' per mostrare un messaggio e termina, restituendo ("return") un valore alla funzione chiamante, in questo caso il sistema operativo che ha lanciato il programma.
{{Vedi anche|Operatori in C e C++}}
<source lang="Cpp">
In C++, gli [[Operatori in C e C++|operatori]] sono punteggiature speciali che eseguono operazioni su uno o più operandi; questi possono essere classificati in diverse categorie, come logici, di assegnazione, [[Booleano (informatica)|booleani]], ..., e consentono di scrivere espressioni e di manipolare dati in modo efficace all'interno del codice C++.
#include <iostream> // per std::cout e std::endl
 
== Programmi di esempio (derivati da C) ==
=== Hello world! ===
Esempio del programma ''[[hello world]]'' che utilizza la [[libreria standard C++]] (non l'STL), il flusso di output ''cout'' per mostrare un messaggio e termina, restituendo ("return") un valore alla funzione chiamante, in questo caso il sistema operativo che ha lanciato il programma.
 
<syntaxhighlight lang="cpp">
// libreria input output (per cout e endl)
#include <iostream>
 
// uso dello spazio dei nomi standard (per evitare di mettere std:: prima di
// ogni istruzione)
using namespace std;
 
int main()
{
cout << "Hello World!" << endl;
 
// valore di ritorno del programma
return 0;
return 0;
}
</syntaxhighlight>
</source>
'''Nota''': Lo <tt>std</tt> seguito dal doppio segno "due punti" (<tt>::</tt>) specifica il [[namespace]] da usare per la risoluzione dei simboli del programma. In particolare <tt>std</tt> indica di usare il simbolo che si trova nel [[namespace]] standard del C++.
 
=== SommaDifferenza di interidecimali ===
Semplice programma che chiede all'utente di inserire due decimali, ne fa la differenza e ne visualizza il risultato.
 
Il C++ (come anche il [[C (linguaggio)|C]] allo standard [[C (linguaggio)#C99|C99]]) implementa i commenti su riga singola tramite il doppio slash: ''<nowiki>//</nowiki>''. Per i commenti su righe multiple si utilizza la stessa sintassi del C, ossia: ''<nowiki>/* (commento) */</nowiki>''.
Semplice programma che chiede all'utente di inserire due interi, li somma e ne visualizza il risultato.
<syntaxhighlight lang="cpp-winapi">
<br />
Il C++ (come anche il [[C_(linguaggio)|C]] allo standard [[C_(linguaggio)#C99|C99]]) implementa i commenti su riga singola tramite il doppio slash: ''//''.
Per i commenti su righe multiple si utilizza la stessa sintassi del C, ossia: ''/* (commento) */''.
<source lang="Cpp">
#include <iostream> // per std::cout, std::cin e std::endl
 
using namespace std;
 
int main()
{
// Inserimento della stringa sullo stream di output standard (stampa il
int numero1, numero2, somma; // Dichiarazione del tipo (intero) e del nome delle variabili
// messaggio a video) std::endl, oltre ad inserire una nuova linea sullo
cout << "Inserire un numero intero" << endl; // Inserimento della stringa sullo stream di output standard (stampa il messaggio a video)
// endl è una funzione standard che opera sullo stream, che oltre a inserire una nuova linea svuota anche il buffer
cout << "scrivi numero decimale" << endl;
cin >> numero1; // Lettura dallo stream standard di input (in questo caso della variabile "numero1", non c'è bisogno di specificare il tipo)
cout << "Inserire un altro numero intero" << endl;
cin >> numero2;
somma = numero1 + numero2; // Effettua la somma dei due operandi e l'assegna alla variabile somma
cout << somma << endl;
 
// Definizione di una variabile e del relativo tipo (float, quindi decimale)
return 0;
// Non è importante che le definizioni siano all'inizio del blocco di codice
float numero1;
 
// Lettura dallo stream standard di input di un decimale da memorizzare
// variabile "numero1"
cin >> numero1;
 
cout << "Inserire un altro numero decimale" << endl;
float numero2;
cin >> numero2;
 
// La variabile "differenza" viene inizializzata con la differenza dei numeri letti
float differenza = numero1 - numero2;
cout << differenza << endl;
 
return 0;
}
</syntaxhighlight>
</source>
 
=== Numero maggiore ===
Il programma chiede all'utente più numeri e mostra il maggiore fra quelli inseriti (interrompendo l'esecuzione quando viene inserito un numero negativo o nullo). Oltre all{{'}}''int'', il c++ utilizza anche il ''float'' per dichiarare variabili sia intere sia non intere.
<syntaxhighlight lang="cpp">
#include <iostream>
 
using namespace std;
 
int main()
{
float m(0.0);
float x;
 
do
{
cout << "Inserire un numero positivo (negativo o nullo per uscire): ";
cin >> x;
 
if (x > m)
m = x;
} while (x > 0.0);
 
cout << "Il numero maggiore era " << m << endl;
 
return 0;
}
</syntaxhighlight>
 
=== Somma dei primi n numeri naturali ===
Esempio di un programma che, inserito un numero n, calcola e stampa la somma dei primi n numeri naturali.<syntaxhighlight lang="c++">
// Libreria input output
#include <iostream>
 
using namespace std;
 
int main()
{
int n; // Dichiarazione della variabile n
int somma = 0; // Dichiaro la variabile che conterrà la somma e la imposto uguale a 0
cout << "Inserisci il numero: ";
cin >> n; // leggo da tastiera il valore di n
for (int i = 0; i <= n; i++) // per i che va da 0 a n
somma = somma + i; // aggiungo i alla somma complessiva
cout << "La somma dei primi " << n << " numeri naturali e': " << somma << endl;
return 0;
}
</syntaxhighlight>
 
=== Area di un rettangolo ===
Il calcolo dell'area di una figura piana come il rettangolo è qui sottoesposto:
<syntaxhighlight lang="cpp">
#include <iostream>
 
using namespace std;
 
int main()
{
float base, altezza, areaRettangolo;
cout << "Questo programma calcola l'area di un rettangolo." << endl;
cout << "Quanto vale la base? ";
cin >> base;
cout << "Quanto vale l'altezza? ";
cin >> altezza;
areaRettangolo = base * altezza;
cout << "L'area vale: " << areaRettangolo << endl;
return 0;
}
</syntaxhighlight>
 
=== Definizione di Classe ===
<sourcesyntaxhighlight lang="Cppcpp">
#include <stringiostream>
 
using namespace std;
 
class Message
{
public:
Message(const string& subject, const string& from) :
subject_(subject), from_(from) {}
{}

const string& subjectgetSubject() const { return subject_; }
 
const string& from() const { return from_; }
const string& getFrom() const { return from_; }
private:
 
private:
string subject_;
string from_;
};
</syntaxhighlight>Un semplice utilizzo della classe appena definita e implementata può essere:<syntaxhighlight lang="cpp">
</source>
#include <iostream>
Essendo specificato <tt>std</tt> come <tt>[[namespace]]</tt> generale, non è necessario indicare il <tt>[[namespace]]</tt> per la risoluzione di ogni simbolo (<tt>std::</tt>).
 
using namespace std;
== Il controllo dell'input==
 
int main()
{
// Inizializzazione di un'istanza della classe Message
Message mess("Saluti", "Pippo");
 
// Saluti da Pippo
cout << mess.getSubject() << " da " << mess.getFrom();
 
return 0;
}
</syntaxhighlight>
 
=== Generatore numeri casuali ===
Nell'esempio viene usato l'algoritmo [[Mersenne Twister]]. L'oggetto <code>device</code>, su sistemi Unix leggerà valori da <code>[[/dev/random]]</code>, l'oggetto <code>random_algorithm</code> viene inizializzato con un valore casuale letto da <code>device</code>. L'oggetto <code>random_generator</code>, che verrà infine utilizzato per generare il numero casuale desiderato sfrutterà l'entropia ottenuta chiamando <code>random_algorithm()</code> e si assicurerà di produrre valori nell'intervallo specificato in costruzione.<syntaxhighlight lang="cpp" line="1">
#include <iostream>
#include <random>
 
using namespace std;
 
int main()
{
// Inizializza il generatore di numeri casuali
random_device device;
// Inizializza l'algoritmo di generazione di numeri casuali Mersenne Twister
// 19937
mt19937 random_algorithm(device());
// Inizializza un oggetto che produrrà interi casuali da 0 a 100 con
// probabilità uniformi
uniform_int_distribution<int> random_generator(0, 100);
 
// Assegna alla variabile "casuale" a un numero casuale
int casuale = random_generator(random_algorithm);
// Comunica il numero casuale generato
cout << "Numero casuale generato: " << casuale;
// Output:
// Numero casuale generato: [0, 100]
 
return 0;
}
</syntaxhighlight>
Il programma in questo caso genera un [[numero casuale]] tra 100 e 0.
 
=== Ciclo for ===
<syntaxhighlight lang="c++">
#include <iostream>
using namespace std;
 
int main()
{
for (int numero = 0; numero<10; numero++)
{
cout<<"Numero vale: "<<numero<<endl;
}
return 0;
}
</syntaxhighlight>Nel caso in esempio, finché <code>numero</code> è minore di 10, il programma continua a ripetere la stringa <code>Numero vale: numero</code> incrementando ad ogni fine del ciclo il valore <code>numero</code> di uno (numero++).
 
== Il controllo dell'input ==
Un costrutto che si trova spesso nella programmazione in C++ è:
<sourcesyntaxhighlight lang="Cppcpp">
do
do { ... }
{
while ( condizione );
// ...
</source>
} while (condizione);
</syntaxhighlight>
 
utilizzato per ripetere l'esecuzione di una parte del programma dipendente da una specifica condizione, enunciata nel while.
 
<br />
Il costrutto '''do-while''' implica che il ciclo sia eseguito ''almeno una volta'', poiché la condizione è testata alla fine del corpo di istruzioni specificate dal do.
 
<br />
L'uso del singolo '''while''' invece implica che il ciclo possa anche non essere mai eseguito, se la condizione si trovasse ad essere subito non verificata.
 
'''Programma:''' dati due numeri ed un operatore ( + - * / ) calcolarne il risultato:
 
<sourcesyntaxhighlight lang="Cppcpp">
#include <iostream>
#include <limits>
 
using namespace std;
Riga 131 ⟶ 316:
int main()
{
double a, b, r;
// Inserimento dell'input: operandi e segno
char s;
cout << "Inserisci il primo operando: ";
cin >> a;
cout << "\nInserisci il secondo operando: ";
cin >> b;
cout << "\nInserisci un segno: ";
do
{
cin >> s;
if ( s != '+' && s != '-' && s != '*' && s != '/' )
{
cerr << "\nErrore:cin segno>> non corretto." << endls;
if (s != '+' && s != '-' && s != '*' && s != '/')
cout << "Inserisci un segno: ";
{
cerr << "\nErrore: segno non corretto." << endl;
cout << "Inserisci un segno: ";
}
 
// != significa 'non uguale a', && corrisponde alla AND booleana
} while (s != '+' && s != '-' && s != '*' && s != '/');
 
// Calcolo del risultato, in base al segno immesso
switch (s)
{
case '+':
r = a + b;
break;
case '-':
r = a - b;
break;
case '*':
r = a * b;
break;
default: // In caso nessuna delle precedenti condizioni si verifichi...
r = a / b;
}
 
}
cout << "\nIl risultato " << (char) 0x8a << ": " << r << endl;
while ( s != '+' && s != '-' && s != '*' && s != '/' ); // != significa 'diverso da', && corrisponde alla AND booleana
// 0x8a indica il carattere ASCII 8A (138 in esadecimale) ovvero la 'e' con
// accento grave (è) (char) tra parentesi indica un'operazione di cast,
// Calcolo del risultato, in base al segno immesso
// conversione forzata.
if ( s == '+' )
 
r = a + b;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
else if ( s == '-' )
r = a - bcin.get();
return 0;
else if( s == '*' )
r = a * b;
else // Il controllo qui non è necessario, s == '/' è vera per esclusione.
r = a / b;
cout << "\nIl risultato e' "<< r << endl;
return 0;
}
</syntaxhighlight>
</source>
 
In questo caso, l'istruzione <ttcode>do</ttcode> è stata utilizzata per impedire al programma di proseguire l'esecuzione con un valore del parametro <ttcode>s</ttcode> non corretto.
 
Scrittura di file:
== Bibliografia ==
 
; Per imparare il linguaggio
Il programma mostrato di seguito crea un file chiamato "prova.txt" e ci scrive dentro "Hello world".<syntaxhighlight lang="c++">
*{{Cita libro
// Per il cout
|autore = [[Bjarne Stroustrup]]
#include <iostream>
|titolo = The C++ Programming Language
 
|editore = Addison-Wesley
// Per la gestione dei file
|lingua = inglese
#include <fstream>
|ISBN = ISBN 978-0-201-70073-2
 
}}
// Per evitare di scrivere
*:Traduzione in italiano: {{Cita libro
// std::cout, std::end, std::ofstream
|autore = [[Bjarne Stroustrup]]
using namespace std;
|titolo = C++ - Linguaggio, libreria standard, principi di programmazione
 
|editore = Addison-Wesley
// Funzione principale
|anno = 2000
int main()
|mese = 04
{
|ed = 3
cout << "Apertura file" << endl;
|ISBN = ISBN 8871920783
// Inizializzo la classe ofstream
}}
// Dando come parametro al costruttore
*{{Cita libro
// Il nome del file da creare
|nome = Carlo
ofstream file("prova.txt");
|cognome = Savy
cout << "Scrittura file" << endl;
|titolo = Da C++ a UML - guida alla progettazione
// Scrivo dentro al file
|editore = McGraw-Hill
file << "Hello world";
|ISBN = ISBN 88-386-0862-8
cout << "Chiusura file" << endl;
}}
// Chiudo il file
file.close();
 
return 0;
}
</syntaxhighlight>
 
== Note ==
<references />
 
== Bibliografia ==
* {{Cita libro|autore = [[Bjarne Stroustrup]]|titolo = The C++ Programming Language|editore = Addison-Wesley|lingua = inglese|ISBN = 978-0-201-70073-2}}
* {{Cita libro|nome = Bjarne|cognome = Stroustrup|titolo = C++. Linguaggio, libreria standard, principi di programmazione|editore = Pearson|ISBN = 978-88-6518-448-6|autore=|anno=2015|p=1279}}
* {{Cita libro|titolo = Programmazione ad oggetti e linguaggio C++|editore = Atlas|ISBN = 978-88-268-1195-6|autore=Agostino Lorenzi, Marco Ambrosini, Sara Foresti|anno=2004|p=384}}
* {{Cita libro|titolo = C++. Fondamenti di programmazione|editore = Apogeo|ISBN = 978-88-387-8571-9|autore=Harvey M. Deitel, Paul J. Deitel|anno=2014|p=768}}
* {{Cita libro|titolo = Introduzione alla programmazione ed elementi di strutture dati con il linguaggio C++|editore = Franco Angeli Editore|ISBN = 978-88-464-6202-2|autore=Andrea Domenici, Graziano Frosini|anno=2013|p=480}}
 
== Voci correlate ==
* [[Operatori in C e C++]]
* [[C++11]]
* [[Crypto++]]
* [[Include guard]]
* [[Most vexing parse]]
* [[Regola del tre (C++)]]
 
== Altri progetti ==
{{interprogetto|commons=Category:C++|b=Dal C al C++|vpreposizione=C++sul}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{en}} [http://www.open-std.org/jtc1/sc22/wg21/ Pagine del comitato per la standardizzazione: JTC1/SC22/WG21 - C++]
* {{FOLDOC}}
* {{en}} [http://www.research.att.com/~bs/bs_faq.html Lista di domande frequenti] mantenuta da Bjarne Stroustrup
* {{cita web|http://www.open-std.org/jtc1/sc22/wg21/|Pagine del comitato per la standardizzazione: JTC1/SC22/WG21 - C++|lingua=en}}
* {{en}} [http://www.cplusplus.com cplusplus.com - The C++ Resources Network]
* {{en}}[http://www.research.att.com/~bs/bs_faq.html Lista di domande frequenti] mantenuta da Bjarne Stroustrup
* [http://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/01Indice.html Lezioni sul C++ del CNR di Bologna]
* {{cita web|1=http://www.cplusplus.com|2=cplusplus.com - The C++ Resources Network|lingua=en|accesso=27 giugno 2020|urlarchivio=https://web.archive.org/web/20200422171727/http://cplusplus.com/|dataarchivio=22 aprile 2020|urlmorto=sì}}
* [http://programmazione.html.it/guide/leggi/34/guida-c/ Guida all'utilizzo del C++ da HTML.it]
* {{cita web|https://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/01Indice.html|Lezioni sul C++ del CNR di Bologna}}
 
* {{cita web | 1 = http://programmazione.html.it/guide/leggi/34/guida-c/ | 2 = Guida all'utilizzo del C++ da HTML.it | accesso = 22 dicembre 2007 | dataarchivio = 12 ottobre 2007 | urlarchivio = https://web.archive.org/web/20071012223006/http://programmazione.html.it/guide/leggi/34/guida-c/ | urlmorto = sì }}
{{Norme IEC}}
{{C++}}
{{Linguaggio C}}
{{Principali linguaggi di programmazione}}
{{Android}}
 
{{Controllo di autorità}}
{{portale|informatica}}
 
[[Categoria:C++| ]]
[[Categoria:Standard ISO/IEC|14882]]
 
[[af:C++]]
[[an:C++]]
[[ar:سي++]]
[[arz:سى++]]
[[az:C++]]
[[bat-smg:C++]]
[[be:C++]]
[[bg:C++]]
[[bn:সি++]]
[[br:Areg C++]]
[[bs:C++]]
[[bug:C++]]
[[ca:C++]]
[[cs:C++]]
[[cv:Си++]]
[[da:C++]]
[[de:C++]]
[[el:C++]]
[[en:C++]]
[[eo:C++]]
[[es:C++]]
[[et:C++]]
[[eu:C++]]
[[fa:سی++]]
[[fi:C++]]
[[fr:C++]]
[[ga:C++]]
[[gan:C++]]
[[gl:C++]]
[[he:C++]]
[[hi:सी++]]
[[hr:C++]]
[[hu:C++]]
[[hy:C++]]
[[ia:C++]]
[[id:C++]]
[[is:C++]]
[[ja:C++]]
[[jv:C++]]
[[ka:C++]]
[[kaa:C++]]
[[ko:C++]]
[[ky:C++ программалоо тили]]
[[la:C++]]
[[lb:C++]]
[[lt:C++]]
[[lv:C++]]
[[mk:C++]]
[[ml:സി++]]
[[mr:सी प्लस प्लस प्रोग्रॅमिंग लँग्वेज]]
[[ms:C++]]
[[my:C++]]
[[new:सी++]]
[[nl:C++]]
[[nn:C++]]
[[no:C++]]
[[oc:C++]]
[[pl:C++]]
[[pnb:سی++]]
[[pt:C++]]
[[ro:C++]]
[[ru:C++]]
[[sah:C++]]
[[sh:C++]]
[[simple:C++]]
[[sk:C++]]
[[sl:C++]]
[[sq:C++]]
[[sr:C++]]
[[sv:C++]]
[[ta:சி++]]
[[te:సీ ప్లస్ ప్లస్]]
[[tg:C++]]
[[th:ภาษาซีพลัสพลัส]]
[[tk:C++ programmirleme]]
[[tr:C++]]
[[uk:C++]]
[[uz:C++]]
[[vi:C++]]
[[yi:++C]]
[[yo:C++]]
[[zh:C++]]
[[zh-yue:C++]]