Libreria standard C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.9.5
 
(9 versioni intermedie di 3 utenti non mostrate)
Riga 1:
{{S|sistema operativoinformatica}}
Nel [[C++]], la '''libreria standard C++''' è una collezione di [[classe (informatica)|classi]] e [[funzione (informatica)|funzioni]], che sono scritte nel linguaggio stesso e sono a loro volta parte dello Standard [[ISO]] C++ <ref>ISO/IEC 14882:2003(E) ''Programming Languages — C++'' §17-27</ref>.
 
La '''libreria standard C++''' è una [[libreria software]] definita nello standard ISO/IEC 14882, ovvero il [[C++|linguaggio di programmazione C++]]. Contiene molte funzionalità di utilizzo comune nella scrittura di programmi, e costituisce la principale libreria disponibile ai [[programmatore|programmatori]] C++.<ref name="open-std">{{cita web|url=https://www.open-std.org/JTC1/SC22/WG21/docs/standards#14882|titolo=C++ standards|lingua=en}}</ref>
La libreria standard C++ fornisce una serie di contenitori generici e di funzioni strutturate per manipolarli, insieme a funzioni oggetti, stringhe e stream generici (utili anche per l'input/output su file o a video), funzioni di supporto alla programmazione e matematiche. La libreria standard C++ incorpora anche la libreria standard ISO [[C90]]. Tutte le funzioni e le classi sono dichiarate all'interno del namespace <code>std</code>.
 
La libreria è organizzata in diversi [[programmazione modulare|moduli]] tematici, ognuno dei quali raggruppa [[classe (informatica)|classi]] e [[funzione (informatica)|funzioni]] utili ad affrontare una determinata tipologia di problemi. Ogni modulo comprende uno o più ''[[header file]]'', che possono essere utilizzati per includere selettivamente le funzionalità della libreria all'interno di un programma.<ref name="headers index">{{cita web|url=https://en.cppreference.com/w/cpp/header|titolo=C++ standard library headers|lingua=en}}</ref>
Gli [[header file]] nella libreria standard del C++ non hanno l'estensione ".h". Tuttavia, la Libreria Standard del C++ include 18 header file dalla libreria standard del C, che terminano con il ".h". Il loro uso è deprecato e mantenuto solo per retrocompatibilità<ref>ISO/IEC 14882:2003(E) ''Programming Languages — C++'' §D.5</ref>.
 
Le funzionalità offerte rientrano nelle seguenti aree: supporto al linguaggio base, rilevamento delle funzionalità, validazione concettuale, [[diagnostica (informatica)|diagnostica]], [[gestione della memoria]], [[metaprogrammazione]], [[stringa (informatica)|stringhe testuali]], [[struttura dati|strutture contenitore]], [[iteratore|iteratori]], supporto ai [[insieme|sottoinsiemi]], [[algoritmo|algoritmi generici]], [[elaborazione numerica]], [[tempo|grandezze temporali]], [[Localizzazione (sviluppo software)|localizzazione]], gestione di ''input/output'', [[espressione regolare|espressioni regolari]], supporto alle [[concorrenza (informatica)|operazioni concorrenti]]. Sono inoltre incluse tutte le funzionalità disponibili nella libreria standard del [[linguaggio C]] (ISO C99).<ref>{{cita web|url=https://en.cppreference.com/w/cpp|titolo=C++ standard library index|lingua=en}}</ref>
== Esempi ==
Il [[linguaggio di programmazione]] [[C++]] è un linguaggio OOP (''[[Programmazione orientata agli oggetti|object-oriented programming]]'') derivato dal [[C (linguaggio)|linguaggio C]]. Il linguaggio C++ ha ereditato dal C la caratteristica che le sue [[Funzione (informatica)|funzioni]] possono essere definite dall'utente programmatore ed inserite in una [[Libreria software|libreria]]. Buona parte delle più importanti funzioni del C++, per esempio quelle di ingresso e uscita, sono contenute in una libreria "standard", suscettibile però di modifica. Per esempio se il programma scritto in C++ deve ricevere e stampare su schermo dei dati esso dovrà contenere nelle definizioni iniziali il file di ''header'' <code>iostream</code>; cioè supponendo di voler scrivere il programma ''[[Hello world]]'' allora bisognerà scrivere:
<syntaxhighlight lang="cpp" line="1">
#include <iostream>
// richiama dalla libreria standard il file header iostream
 
A differenza della [[libreria C]] tutte le funzionalità sono dichiarate all'interno del ''[[namespace]]'' riservato <code>std</code> e gli ''header'' non presentano un'[[estensione (informatica)|estensione]].<ref name="headers index"/>
using namespace std;
//direttiva propria del c++ per dichiarare l'uso dello spazio dei nomi della libreria standard
 
== EsempiStoria ==
int main () { //int è un identificatore che indica che
{{...|informatica}}
cout << "Hello world " << endl; //la funzione main, anch'essa presente
 
return 0; //nella libreria standard del c/c++,
== Implementazioni ==
} //restituisce un valore intero, zero
 
//se il programma è stato eseguito correttamente.
Lo standard ISO definisce le funzionalità incluse nella libreria ma non offre alcuna implementazione di riferimento. Nel tempo sono quindi nate una varietà di implementazioni indipendenti. Le più conosciute sono quelle mantenute direttamente dai fornitori dei [[compilatore|compilatori]].
//In particolare main rappresenta il corpo
//del programma principale.
</syntaxhighlight>
 
==Implementazioni==
{| class="wikitable sortable"
|+ Principali implementazioni della libreria standard C++
! Nome || Sito web || Acronimo || Licenza || Ultima versione
! Sito web || Nome esteso || Nome breve || Licenza
|-
| GNU C++ Standard Library || [https://gcc.gnu.org/onlinedocs/libstdc++] || libstdc++ || GPLv3 || 11/15/2021
| [[GNU]] C++ Standard Library
| libstdc++
| [[GNU General Public License|GPLv3]]
|-
| [https://libcxx.llvm.org/]
| LLVM C++ Standard Library || [https://libcxx.llvm.org/] || libc++ || Apache License v2.0 with LLVM Exceptions || 9/30/2021
| [[LLVM]] C++ Standard Library
| libc++
| [[Licenza Apache|Apache v2.0]] with LLVM Exceptions
|-
| NVIDIA C++ Standard Library || [https://nvidia.github.io/libcudacxx/] || libcu++ || Apache License v2.0 with LLVM Exceptions || 8/9/2021
| [[NVIDIA]] C++ Standard Library
| libcu++
| [[Licenza Apache|Apache v2.0]] with LLVM Exceptions
|-
| Microsoft C++ Standard Library || [https://github.com/microsoft/STL] || MSVC STL || Apache License v2.0 with LLVM Exceptions || 12/16/2021
| [[Microsoft]] C++ Standard Library
| MSVC STL
| [[Licenza Apache|Apache v2.0]] with LLVM Exceptions
|-
| [https://hpx.stellar-group.org/]
| HPX C++ Standard Library for Parallelism and Concurrency || [https://hpx.stellar-group.org/] || HPX || Boost Software License 1.0 || 8/12/2021
| HPX C++ Standard Library for Parallelism and Concurrency
| HPX
| [[Licenza Boost|Boost Software License 1.0]]
|-
| Electronic Arts Standard Template Library || [https://github.com/electronicarts/EASTL] || EASTL || BSD 3-Clause License || 10/20/2021
| [[Electronic Arts]] Standard Template Library
| EASTL
| [[Licenza BSD|BSD 3-Clause]]
|-
| [http://www.dinkumware.com/] {{Webarchive|url=https://web.archive.org/web/20210211202233/http://www.dinkumware.com/ |date=11 febbraio 2021 }}
| Dinkum C++ Library || [http://www.dinkumware.com/] || || Commerciale ||
| Dinkum C++ Library
|
| Commerciale
|-
| [https://cug.org/]
| Cray C++ Standard Library || [https://cug.org/] || || Commerciale ||
| Cray C++ Standard Library
|
| Commerciale
|}
 
Line 96 ⟶ 112:
;{{codice|<algorithm>}}:Fornisce definitions of many container [[algorithm]]s.
;{{codice|<execution>}}:Fornisce execution policies for parallelized [[algorithms]].
;{{codice|<iterator>}}:Fornisce classes and templates for working with [[iteratorIteratore|iterators]]s.
;{{codice|<ranges>}}:Novità in [[C++20]]. Fornisce [[Range (computer programming)|ranges]] facilities and lazy evaluated adaptors.
 
Line 145 ⟶ 161:
;{{codice|<numeric>}}: Per le operazioni numeriche generalizzate.
 
=== Libreria standard del C= ==
{{Vedi anche|Libreria standard del C}}
 
Ogni [[file di intestazione|intestazione]] della libreria standard C è inclusa nella libreria standard C++ con un nome diverso, generata rimuovendo il .h e aggiungendo una "c" all'inizio; ad esempio, 'time.h' diventa 'ctime'. L'unica differenza tra queste intestazioni e le tradizionali intestazioni della Libreria standard C è che, ove possibile, le funzioni dovrebbero essere collocate nello spazio dei nomi <code>std::</code>. In ISO C, le funzioni nella libreria standard possono essere implementate da macro, cosa che non è consentita da ISO C++.
La libreria standard C++ ricomprende le funzionalità classicamente disponibili nella libreria standard di [[C (linguaggio di programmazione)|ISO C99]]. Come per il resto anche questa parte è divisa in moduli, ricalcando la struttura della libreria originale. I nomi degli ''header'' sono ricavati da quelli originali, aggiungendo una <code>c</code> prefissa e rimuovendo l'estensione <code>.h</code>. Ad esempio, l{{'}}''header'' 'time.h' diventa 'ctime'.<ref name="cstdlib">{{cita web|url=https://en.cppreference.com/w/cpp/standard_library#C_standard_library|titolo=C standard library in C++}}</ref>
 
Questi ''header'' in molti casi includono internamente gli ''header'' C originali, con l'unica differenza che, ove possibile, le dichiarazioni ricadono nel namespace <code>std</code>.<ref name="cstdlib"/>
 
== Note ==