C++: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Annullata la modifica di 2.35.73.162 (discussione), riportata alla versione precedente di Solipsistico Etichetta: Rollback |
m Bot: apostrofo dopo l'articolo indeterminativo |
||
(17 versioni intermedie di 9 utenti non mostrate) | |||
Riga 4:
|immagine = ISO C++ Logo.svg<!-- Solo nome file -->
|didascalia = Logo del linguaggio
|autore =
|data =
|versione =
|utilizzo = Generico
Riga 20:
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>
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]]
== Storia ==
Riga 42:
== Descrizione ==
=== Linguaggio ===
La prima parte dello [[Norma tecnica|standard]] definisce le caratteristiche fondamentali del linguaggio<ref>{{Cita libro|lingua=inglese|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
* 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=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>.
=== Libreria standard ===
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.
▲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>{{Cita web |url=http://www.stlport.org|titolo=STLport: Welcome!<!-- Titolo generato automaticamente -->}}</ref>
=== 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
=== Operatori ===
Riga 409 ⟶ 430:
{{Linguaggio C}}
{{Principali linguaggi di programmazione}}
{{Android}}
{{Controllo di autorità}}
{{portale|informatica}}
|