Libreria standard C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.9.5
 
(24 versioni intermedie di 14 utenti non mostrate)
Riga 1:
{{S|sistema operativoinformatica}}
Nel [[C++]], la '''libreria standard C++''' è una collezione di [[classe (informatica)|classe]] e [[funzione (informatica)|funzioni]], che sono scritte nel linguaggio cuore 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++ 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 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>
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 per retrocompatibilità<ref>ISO/IEC 14882:2003(E) ''Programming Languages — C++'' §D.5</ref>.
 
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>
== Motivazioni ed 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 dal programmatore utente 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 ''[[Hello world]]'' allora il programma sarà scritto:
<source lang="cpp" line="1">
#include <iostream>
// richiama dalla libreria standard la funzione iostream
 
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>
using namespace std;
//direttiva propria del c++ per dichiarare l'uso dello spazio dei nomi della libreria standard
 
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"/>
int main () { //int è un identificatore che indica che
 
cout << "Hello world " << endl; //la funzione main, anch'essa presente
== Storia ==
return 0; //nella libreria standard del c/c++,
{{...|informatica}}
} //restituisce un valore intero, zero
 
//se il programma è stato eseguito correttamente.
== Implementazioni ==
//In particolare main rappresenta il corpo
 
//del programma principale.
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]].
</source>
 
{| class="wikitable sortable"
|+ Principali implementazioni della libreria standard C++
! Sito web || Nome esteso || Nome breve || Licenza
|-
| [https://gcc.gnu.org/onlinedocs/libstdc++]
| [[GNU]] C++ Standard Library
| libstdc++
| [[GNU General Public License|GPLv3]]
|-
| [https://libcxx.llvm.org/]
| [[LLVM]] C++ Standard Library
| libc++
| [[Licenza Apache|Apache v2.0]] with LLVM Exceptions
|-
| [https://nvidia.github.io/libcudacxx/]
| [[NVIDIA]] C++ Standard Library
| libcu++
| [[Licenza Apache|Apache v2.0]] with LLVM Exceptions
|-
| [https://github.com/microsoft/STL]
| [[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
| HPX
| [[Licenza Boost|Boost Software License 1.0]]
|-
| [https://github.com/electronicarts/EASTL]
| [[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
|
| Commerciale
|-
| [https://cug.org/]
| Cray C++ Standard Library
|
| Commerciale
|}
 
==Header standard==
{{T|lingua=inglese|argomento=informatica|data=gennaio 2022}}
I file seguenti contengono le dichiarazioni della libreria standard C++.
 
===Generici===
;{{codice|<any>}}:Novità in [[C++17]]. Fornisce una classe senza tipo <code>std::any</code>.
;{{codice|<atomic>}}:Novità in [[C++11]]. Fornisce la classe template <code>std::atomic</code>, le sue diverse specializzazioni di modelli e più operazioni atomiche.
;{{codice|<chrono>}}:Fornisce funzioni per le temporizzazioni, come <code>std::chrono::duration</code>, <code>std::chrono::time_point</code> e orologi. A partire da [[C++20]], le novità aggiunte sono calendari, fusi orari, nuovi orologi e stringhe di formattazione per orari e intervalli.
;{{codice|<concepts>}}:Novità in [[C++20]]. Fornisce la libreria per le [[C++11#Concept|concepts]].
;{{codice|<functional>}}:Fornisce diverse funzioni oggetto, realizzate per l'uso con algoritmi standard.
;{{codice|<memory>}}:Fornisce funzioni per la [[gestione della memoria]] in C++, includendo la classe template <code>std::unique_ptr</code>.
;{{codice|<memory_resource>}}:Novità in [[C++17]]. Fornisce facilities for creating polymorphic memory allocators whose behaviors can change at runtime.<ref>{{Cita web|cognome=Filipek|nome=Bartlomiej|titolo=Polymorphic Allocators, std::vector Growth and Hacking|url=https://www.bfilipek.com/2020/06/pmr-hacking.html|accesso=30 aprile 2021|lingua=en}}</ref>
;{{codice|<scoped_allocator>}}:Novità in [[C++11]]. Fornisce <code>std::scoped_allocator_adaptor</code>.
;{{codice|<stdexcept>}}:Contains standard exception classes such as <code>std::logic_error</code> and <code>std::runtime_error</code>, both derived from <code>std::exception</code>.
;{{codice|<system_error>}}:Novità in [[C++11]]. Definisce <code>std::error_code</code>
;{{codice|<optional>}}:Novità in [[C++17]]. Fornisce la classe template <code>std::optional</code> per i [[Opzionali|tipi opzionali]].
;{{codice|<stacktrace>}}:Novità in [[C++23]]. Fornisce le operazioni [[stack trace]].
;{{codice|<tuple>}}:Novità in [[C++11]] e [[C++ Technical Report 1|TR1]]. Fornisce la classe template <code>std::tuple</code>, una [[tupla]].
;{{codice|<type_traits>}}:Novità in [[C++11]]. Fornisce funzioni di metaprogrammazione per lavorare con i tipi.
;{{codice|<utility>}}:Fornisce various utilities: class template <code>std::pair</code> (two-member [[tuple]]s), compile-time integer sequences, helpers in constructing vocabulary types, functions such as <code>std::move</code> and <code>std::forward</code>, and many more. The namespace <code>std::rel_ops</code> for automatically generating comparison operators is deprecated in [[C++20]] in favor of new defaulted comparison operators.
;{{codice|<variant>}}:Novità in [[C++17]]. Fornisce la classe template <code>std::variant</code>, a [[Tagged union|tagged union type]].
 
===Supporto del linguaggio===
;{{codice|<compare>}}:Novità in [[C++20]]. Fornisce il supporto al nuovo [[Three-way comparison|operatore a tre vie]].
;{{codice|<coroutine>}}:Novità in [[C++20]]. Fornisce il supporto alle [[coroutine]].
;{{codice|<exception>}}:Fornisce several types and functions related to [[exception handling]], including <code>std::exception</code>, the base class of all exceptions thrown by the Standard Library.
;{{codice|<initializer_list>}}:Novità in [[C++11]]. Fornisce il supporto alle [[Inizializzatore|liste di inizializzatori]].
;{{codice|<limits>}}:Fornisce la classe template <code>std::numeric_limits</code>, used for describing properties of fundamental numeric types.
;{{codice|<new>}}:Fornisce gli operatori <code>new</code> e <code>delete</code> oltre che altre funzioni e tipi, i quali compongono i fondamenti della [[gestione della memoria]] in C++.
;{{codice|<source_location>}}:Novità in [[C++20]]. Fornisce capturing source ___location information as alternative to predefined macros such as <code>__LINE__</code>.
;{{codice|<typeinfo>}}:Fornisce facilities for working with C++ [[run-time type information]].
;{{codice|<version>}}:Novità in [[C++20]]. Fornisce informazioni riguardo l'implementazione corrente della libreria standard C++.<ref>{{Cita web|data=1º aprile 2020|titolo=Working Draft, Standard for Programming Language C++|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2020/n4861.pdf|lingua=en|accesso=30 aprile 2021|pubblicazione=ISO/IEC|p=492}}</ref>
 
===Strutture dati===
;{{codice|<array>}}:Novità in [[C++11]] and TR1. Fornisce the container class template <code>[[array (C++)|std::array]]</code>, a container for a fixed sized array.
;{{codice|<bitset>}}:Fornisce the specialized container class <code>std::bitset</code>, a [[bit array]].
;{{codice|<deque>}}:Fornisce the container class template <code>[[deque (C++)|std::deque]]</code>, a [[deque|double-ended queue]].
;{{codice|<forward_list>}}:Novità in [[C++11]] and TR1. Fornisce the container class template <code>[[forward list (C++)|std::forward_list]]</code>, a [[Linked list|singly linked list]].
;{{codice|<list>}}:Fornisce the container class template <code>[[list (C++)|std::list]]</code>, a [[doubly linked list]].
;{{codice|<map>}}:Fornisce the container class templates <code>[[map (C++)|std::map]]</code> and <code>std::multimap</code>, sorted [[Array associativo|associative array]] and [[Multimap (data structure)|multimap]].
;{{codice|<queue>}}:Fornisce the container adapter class <code>std::queue</code>, a single-ended [[Queue (data structure)|queue]], and <code>std::priority_queue</code>, a [[priority queue]].
;{{codice|<set>}}:Fornisce the container class templates <code>[[set (C++)|std::set]]</code> and <code>std::multiset</code>, sorted associative containers or [[Set (computer science)|set]]s.
;{{codice|<span>}}:Novità in [[C++20]]. Fornisce the container adapter class template <code>std::span</code>, a mutable non-owning view that refers to any contiguous range.
;{{codice|<stack>}}:Fornisce the container adapter class <code>[[stack (C++)|std::stack]]</code>, a [[Stack (data structure)|stack]].
;{{codice|<unordered_map>}}:Novità in [[C++11]] and TR1. Fornisce the container class template <code>[[unordered map (C++)|std::unordered_map]]</code> and <code>std::unordered_multimap</code>, [[hash table]]s.
;{{codice|<unordered_set>}}:Novità in [[C++11]] and TR1. Fornisce the container class template <code>[[unordered set (C++)|std::unordered_set]]</code> and <code>std::unordered_multiset</code>.
;{{codice|<vector>}}:Fornisce the container class template <code>[[vector (C++)|std::vector]]</code>, a [[Array dinamico|dynamic array]].
 
===Iteratori e intervalli===
;{{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 [[Iteratore|iterators]].
;{{codice|<ranges>}}:Novità in [[C++20]]. Fornisce [[Range (computer programming)|ranges]] facilities and lazy evaluated adaptors.
 
===Localizzazione===
;{{codice|<locale>}}: Definisce classes and declares functions that encapsulate and manipulate the information peculiar to a [[Locale (computer software)|locale]].
;{{codice|<codecvt>}}: Fornisce code conversion facets for various character encodings. Questo header è deprecato a partire da [[C++17]].
 
===Stringhe===
;{{codice|<charconv>}}:Novità in [[C++17]]. Fornisce a locale-independent, non-allocating, and non-throwing string conversion utilities from/to integers and floating points.
;{{codice|<format>}}:Novità in [[C++20]]. Fornisce a modern way of formatting strings including <code>std::format</code>.
;{{codice|<string>}}:Fornisce the C++ standard [[String (C++)|string]] classes and templates.
;{{codice|<string_view>}}:Novità in [[C++17]]. Fornisce class template <code>std::basic_string_view</code>, an immutable non-owning view to any string.
;{{codice|<regex>}}: Novità in [[C++11]]. Fornisce utilities for pattern matching strings using [[regular expressions]].
 
===Streams, Files, e Input/Output===
;{{codice|<filesystem>}}:Novità in [[C++17]]. Fornisce facilities for [[file system]] operations and their components.
;{{codice|<fstream>}}:Fornisce facilities for file-based input and output. See [[fstream]].
;{{codice|<iomanip>}}:Fornisce facilities to manipulate output formatting, such as the [[Radix|base]] used when formatting integers and the [[Arithmetic precision|precision]] of [[floating point]] values.
;{{codice|<ios>}}:Fornisce several types and functions basic to the operation of iostreams.
;{{codice|<iosfwd>}}:Fornisce [[forward declaration]]s of several I/O-related class templates.
;{{codice|<iostream>}}:Fornisce le basi per gestire l'input e l'output in C++. Vedere [[iostream]].
;{{codice|<istream>}}:Fornisce <code>std::istream</code> e altre classi di support per l'input.
;{{codice|<ostream>}}:Fornisce <code>std::ostream</code> e altre classi di supporto per l'output.
;{{codice|<spanstream>}}:Novità in [[C++23]]. Fornisce <code>std::spanstream</code> and other fixed character buffer I/O streams.
;{{codice|<sstream>}}:Fornisce <code>std::stringstream</code> and other supporting classes for string manipulation.
;{{codice|<streambuf>}}:Fornisce reading and writing functionality to/from certain types of character sequences, such as external files or strings.
;{{codice|<syncstream>}}:Novità in [[C++20]]. Fornisce <code>std::osyncstream</code> and other supporting classes for synchronized output streams.
 
===Libreria di supporto dei thread===
;{{codice|<barrier>}}: Novità in [[C++20]]. Fornisce <code>std::barrier</code>, a reusable thread barrier.
;{{codice|<condition_variable>}}: Novità in [[C++11]]. In 32.6-1, condition variables provide synchronization primitives used to block a thread until notified by some other thread that some condition is met or until a system time is reached.
;{{codice|<future>}}: Novità in [[C++11]]. In 32.9.1-1, this section describes components that a C++ program can use to retrieve in one thread the result (value or exception) from a function that has run in the same thread or another thread.
;{{codice|<latch>}}: Novità in [[C++20]]. Fornisce <code>std::latch</code>, a single-use thread barrier.
;{{codice|<mutex>}}: Novità in [[C++11]]. In 32.5-1, this section Fornisce mechanisms for mutual exclusion: mutexes, locks, and call once.
;{{codice|<shared_mutex>}}: Novità in [[C++14]]. Fornisce funzioni per la [[mutua esclusione]] condivisa.
;{{codice|<semaphore>}}: Novità in [[C++20]]. Fornisce [[Semaforo (informatica)|semafori]] che modellano un conteggio non negativo delle risorse.
;{{codice|<stop_token>}}: Novità in [[C++20]]. In 32.3.1-1, this section describes components that can be used to asynchronously request that an operation stops execution in a timely manner, typically because the result is no longer required. Such a request is called a stop request.
;{{codice|<thread>}}: Novità in [[C++11]]. Provide class and namespace for working with threads.
 
===Libreria numerica===
Components that C++ programs may use to perform seminumerical operations.
;{{codice|<bit>}}: Novità in [[C++20]]. Fornisce funzioni per la manipolazione dei bit.
;{{codice|<complex>}}: Definisce a class template <code>std::complex</code>, and numerous functions for representing and manipulating complex numbers.
;{{codice|<numbers>}}: Novità in [[C++20]]. Fornisce mathematical constants defined in namespace <code>std::numbers</code>.
;{{codice|<random>}}: Novità in [[C++11]]. Contiene funzioni per generare numeri e ripartizioni (pseudo-)casuali.
;{{codice|<ratio>}}: Novità in [[C++11]]. Fornisce compile-time rational arithmetic based on class templates.
;{{codice|<valarray>}}: Definisce five class templates (<code>std::valarray</code>, <code>std::slice_array</code>, <code>std::gslice_array</code>, <code>std::mask_array</code>, and <code>std::indirect_array</code>), two classes (<code>std::slice</code> and <code>std::gslice</code>), and a series of related function templates for representing and manipulating arrays of values.
;{{codice|<numeric>}}: Per le operazioni numeriche generalizzate.
 
== Libreria C ==
{{Vedi anche|Libreria standard del 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 ==
Line 27 ⟶ 173:
== Voci correlate ==
*[[Libreria standard del C]]
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|url=https://en.cppreference.com/w/cpp/standard_library|titolo=Libreria standard del C++|lingua=en|cid=cppref}}
* {{cita web|url=https://gcc.gnu.org/wiki/Libstdc++|titolo=C++ Standard Library (libstdc++)|lingua=en}}
* {{cita web|url=https://libcxx.llvm.org/|titolo=C++ Standard Library (libc++)¶|lingua=en|cid=libc++}}
 
{{C++}}