C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Gmilza (discussione | contributi)
m Linux link
FrescoBot (discussione | contributi)
m Bot: apostrofo dopo l'articolo indeterminativo
 
(6 versioni intermedie di 5 utenti non mostrate)
Riga 57:
* le direttive del [[preprocessore]]
 
La sintassi di base del C++ è un 'estensione di quella del linguaggio C<ref name="c_comp">{{Cita libro|lingua=inglese|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=inglese|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>.
 
Lo stile di programmazione (definito anche come paradigma)<ref name="multi_p">{{Cita libro|lingua=inglese|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=inglese|autore=Ivan Cukic|titolo=Functional Programming in C++|capitolo=1.5 Evolution of C++ as a functional programming language}}</ref>.
Riga 64:
La seconda parte dello standard del C++ riguarda la [[Libreria standard C++|libreria standard]]; quest'ultima è un insieme di componenti<ref>{{Cita libro|lingua=inglese|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=inglese|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=inglese|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.).
 
La maggior parte deiMolti compilatori fornisceforniscono anche un'implementazione della libreria standard, STL compresa. 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>
 
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=inglese|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.
 
=== Compilatori ===
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.
 
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++20]]<ref del 1998name="comp_sup"/>.
 
=== Operatori ===
Riga 430:
{{Linguaggio C}}
{{Principali linguaggi di programmazione}}
{{Android}}
 
{{Controllo di autorità}}
{{portale|informatica}}