La libreria standard C++ è una libreria software definita nello standard ISO/IEC 14882, ovvero il linguaggio di programmazione C++. Contiene molte funzionalità di utilizzo comune nella scrittura di programmi, e costituisce la principale libreria disponibile ai programmatori C++.
La libreria è organizzata in diversi moduli tematici, ognuno dei quali raggruppa classi e 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.
Le funzionalità offerte rientrano nelle seguenti aree: supporto al linguaggio base, rilevamento delle funzionalità, validazione concettuale, diagnostica, gestione della memoria, metaprogrammazione, stringhe testuali, strutture contenitore, iteratori, supporto ai sottoinsiemi, algoritmi generici, elaborazione numerica, grandezze temporali, localizzazione, gestione di input/output, espressioni regolari, supporto alle operazioni concorrenti. Sono inoltre incluse tutte le funzionalità disponibili nella libreria standard del linguaggio C (ISO C99).
A differenza della libreria C tutte le funzionalità sono dichiarate all'interno del namespace riservato std e gli header non presentano un'estensione.
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 compilatori.
| Sito web | Nome esteso | Nome breve | Licenza |
|---|---|---|---|
| GNU C++ Standard Library | libstdc++ | GPLv3 | |
| LLVM C++ Standard Library | libc++ | Apache v2.0 with LLVM Exceptions | |
| NVIDIA C++ Standard Library | libcu++ | Apache v2.0 with LLVM Exceptions | |
| Microsoft C++ Standard Library | MSVC STL | Apache v2.0 with LLVM Exceptions | |
| HPX C++ Standard Library for Parallelism and Concurrency | HPX | Boost Software License 1.0 | |
| Electronic Arts Standard Template Library | EASTL | BSD 3-Clause | |
| Archiviato l'11 febbraio 2021 in Internet Archive. | Dinkum C++ Library | Commerciale | |
| Cray C++ Standard Library | Commerciale |
I file seguenti contengono le dichiarazioni della libreria standard C++.
<any>std::any.<atomic>std::atomic, le sue diverse specializzazioni di modelli e più operazioni atomiche.<chrono>std::chrono::duration, std::chrono::time_point e orologi. A partire da C++20, le novità aggiunte sono calendari, fusi orari, nuovi orologi e stringhe di formattazione per orari e intervalli.<concepts><functional><memory>std::unique_ptr.<memory_resource><scoped_allocator>std::scoped_allocator_adaptor.<stdexcept>std::logic_error and std::runtime_error, both derived from std::exception.<system_error>std::error_code<optional>std::optional per i tipi opzionali.<stacktrace><tuple>std::tuple, una tupla.<type_traits><utility>std::pair (two-member tuples), compile-time integer sequences, helpers in constructing vocabulary types, functions such as std::move and std::forward, and many more. The namespace std::rel_ops for automatically generating comparison operators is deprecated in C++20 in favor of new defaulted comparison operators.<variant>std::variant, a tagged union type.<compare><coroutine><exception>std::exception, the base class of all exceptions thrown by the Standard Library.<initializer_list><limits>std::numeric_limits, used for describing properties of fundamental numeric types.<new>new e delete oltre che altre funzioni e tipi, i quali compongono i fondamenti della gestione della memoria in C++.<source_location>__LINE__.<typeinfo><version><array>std::array, a container for a fixed sized array.<bitset>std::bitset, a bit array.<deque>std::deque, a double-ended queue.<forward_list>std::forward_list, a singly linked list.<list>std::list, a doubly linked list.<map>std::map and std::multimap, sorted associative array and multimap.<queue>std::queue, a single-ended queue, and std::priority_queue, a priority queue.<set>std::set and std::multiset, sorted associative containers or sets.<span>std::span, a mutable non-owning view that refers to any contiguous range.<stack>std::stack, a stack.<unordered_map>std::unordered_map and std::unordered_multimap, hash tables.<unordered_set>std::unordered_set and std::unordered_multiset.<vector>std::vector, a dynamic array.<algorithm><execution><iterator><ranges><locale><codecvt><charconv><format>std::format.<string><string_view>std::basic_string_view, an immutable non-owning view to any string.<regex><filesystem><fstream><iomanip><ios><iosfwd><iostream><istream>std::istream e altre classi di support per l'input.<ostream>std::ostream e altre classi di supporto per l'output.<spanstream>std::spanstream and other fixed character buffer I/O streams.<sstream>std::stringstream and other supporting classes for string manipulation.<streambuf><syncstream>std::osyncstream and other supporting classes for synchronized output streams.<barrier>std::barrier, a reusable thread barrier.<condition_variable><future><latch>std::latch, a single-use thread barrier.<mutex><shared_mutex><semaphore><stop_token><thread>Components that C++ programs may use to perform seminumerical operations.
<bit><complex>std::complex, and numerous functions for representing and manipulating complex numbers.<numbers>std::numbers.<random><ratio><valarray>std::valarray, std::slice_array, std::gslice_array, std::mask_array, and std::indirect_array), two classes (std::slice and std::gslice), and a series of related function templates for representing and manipulating arrays of values.<numeric>La libreria standard C++ ricomprende le funzionalità classicamente disponibili nella libreria standard di 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 c prefissa e rimuovendo l'estensione .h. Ad esempio, l'header 'time.h' diventa 'ctime'.
Questi header in molti casi includono internamente gli header C originali, con l'unica differenza che, ove possibile, le dichiarazioni ricadono nel namespace std.