Libreria standard C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riformulata sezione iniziale +fonti
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.9.5
 
(8 versioni intermedie di 3 utenti non mostrate)
Riga 3:
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 è organizzata in diversi [[programmazione modulare|moduli]] tematici, ogniunoognuno 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>
 
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>
 
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"/>
 
== EsempiStoria ==
{{...|informatica}}
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
 
== Implementazioni ==
using namespace std;
//direttiva propria del c++ per dichiarare l'uso dello spazio dei nomi della libreria standard
 
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]].
int main () { //int è un identificatore che indica che
cout << "Hello world " << endl; //la funzione main, anch'essa presente
return 0; //nella libreria standard del c/c++,
} //restituisce un valore intero, zero
//se il programma è stato eseguito correttamente.
//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 99 ⟶ 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 148 ⟶ 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 ==