Libreria standard C++

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++.[1]

La libreria è organizzata in diversi moduli tematici, ogniuno 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.[2]

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).[3]

A differenza della libreria C tutte le funzionalità sono dichiarate all'interno del namespace riservato std e gli header non presentano un'estensione.[2]

Storia modifica

Implementazioni modifica

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.

Principali implementazioni della libreria standard C++
Sito web Nome esteso Nome breve Licenza
[1] GNU C++ Standard Library libstdc++ GPLv3
[2] LLVM C++ Standard Library libc++ Apache v2.0 with LLVM Exceptions
[3] NVIDIA C++ Standard Library libcu++ Apache v2.0 with LLVM Exceptions
[4] Microsoft C++ Standard Library MSVC STL Apache v2.0 with LLVM Exceptions
[5] HPX C++ Standard Library for Parallelism and Concurrency HPX Boost Software License 1.0
[6] Electronic Arts Standard Template Library EASTL BSD 3-Clause
[7] Dinkum C++ Library Commerciale
[8] Cray C++ Standard Library Commerciale

Header standard modifica

I file seguenti contengono le dichiarazioni della libreria standard C++.

Generici modifica

<any>
Novità in C++17. Fornisce una classe senza tipo std::any.
<atomic>
Novità in C++11. Fornisce la classe template std::atomic, le sue diverse specializzazioni di modelli e più operazioni atomiche.
<chrono>
Fornisce funzioni per le temporizzazioni, come 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>
Novità in C++20. Fornisce la libreria per le concepts.
<functional>
Fornisce diverse funzioni oggetto, realizzate per l'uso con algoritmi standard.
<memory>
Fornisce funzioni per la gestione della memoria in C++, includendo la classe template std::unique_ptr.
<memory_resource>
Novità in C++17. Fornisce facilities for creating polymorphic memory allocators whose behaviors can change at runtime.[4]
<scoped_allocator>
Novità in C++11. Fornisce std::scoped_allocator_adaptor.
<stdexcept>
Contains standard exception classes such as std::logic_error and std::runtime_error, both derived from std::exception.
<system_error>
Novità in C++11. Definisce std::error_code
<optional>
Novità in C++17. Fornisce la classe template std::optional per i tipi opzionali.
<stacktrace>
Novità in C++23. Fornisce le operazioni stack trace.
<tuple>
Novità in C++11 e TR1. Fornisce la classe template std::tuple, una tupla.
<type_traits>
Novità in C++11. Fornisce funzioni di metaprogrammazione per lavorare con i tipi.
<utility>
Fornisce various utilities: class template 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>
Novità in C++17. Fornisce la classe template std::variant, a tagged union type.

Supporto del linguaggio modifica

<compare>
Novità in C++20. Fornisce il supporto al nuovo operatore a tre vie.
<coroutine>
Novità in C++20. Fornisce il supporto alle coroutine.
<exception>
Fornisce several types and functions related to exception handling, including std::exception, the base class of all exceptions thrown by the Standard Library.
<initializer_list>
Novità in C++11. Fornisce il supporto alle liste di inizializzatori.
<limits>
Fornisce la classe template std::numeric_limits, used for describing properties of fundamental numeric types.
<new>
Fornisce gli operatori new e delete oltre che altre funzioni e tipi, i quali compongono i fondamenti della gestione della memoria in C++.
<source_location>
Novità in C++20. Fornisce capturing source location information as alternative to predefined macros such as __LINE__.
<typeinfo>
Fornisce facilities for working with C++ run-time type information.
<version>
Novità in C++20. Fornisce informazioni riguardo l'implementazione corrente della libreria standard C++.[5]

Strutture dati modifica

<array>
Novità in C++11 and TR1. Fornisce the container class template std::array, a container for a fixed sized array.
<bitset>
Fornisce the specialized container class std::bitset, a bit array.
<deque>
Fornisce the container class template std::deque, a double-ended queue.
<forward_list>
Novità in C++11 and TR1. Fornisce the container class template std::forward_list, a singly linked list.
<list>
Fornisce the container class template std::list, a doubly linked list.
<map>
Fornisce the container class templates std::map and std::multimap, sorted associative array and multimap.
<queue>
Fornisce the container adapter class std::queue, a single-ended queue, and std::priority_queue, a priority queue.
<set>
Fornisce the container class templates std::set and std::multiset, sorted associative containers or sets.
<span>
Novità in C++20. Fornisce the container adapter class template std::span, a mutable non-owning view that refers to any contiguous range.
<stack>
Fornisce the container adapter class std::stack, a stack.
<unordered_map>
Novità in C++11 and TR1. Fornisce the container class template std::unordered_map and std::unordered_multimap, hash tables.
<unordered_set>
Novità in C++11 and TR1. Fornisce the container class template std::unordered_set and std::unordered_multiset.
<vector>
Fornisce the container class template std::vector, a dynamic array.

Iteratori e intervalli modifica

<algorithm>
Fornisce definitions of many container algorithms.
<execution>
Fornisce execution policies for parallelized algorithms.
<iterator>
Fornisce classes and templates for working with iterators.
<ranges>
Novità in C++20. Fornisce ranges facilities and lazy evaluated adaptors.

Localizzazione modifica

<locale>
Definisce classes and declares functions that encapsulate and manipulate the information peculiar to a locale.
<codecvt>
Fornisce code conversion facets for various character encodings. Questo header è deprecato a partire da C++17.

Stringhe modifica

<charconv>
Novità in C++17. Fornisce a locale-independent, non-allocating, and non-throwing string conversion utilities from/to integers and floating points.
<format>
Novità in C++20. Fornisce a modern way of formatting strings including std::format.
<string>
Fornisce the C++ standard string classes and templates.
<string_view>
Novità in C++17. Fornisce class template std::basic_string_view, an immutable non-owning view to any string.
<regex>
Novità in C++11. Fornisce utilities for pattern matching strings using regular expressions.

Streams, Files, e Input/Output modifica

<filesystem>
Novità in C++17. Fornisce facilities for file system operations and their components.
<fstream>
Fornisce facilities for file-based input and output. See fstream.
<iomanip>
Fornisce facilities to manipulate output formatting, such as the base used when formatting integers and the precision of floating point values.
<ios>
Fornisce several types and functions basic to the operation of iostreams.
<iosfwd>
Fornisce forward declarations of several I/O-related class templates.
<iostream>
Fornisce le basi per gestire l'input e l'output in C++. Vedere iostream.
<istream>
Fornisce std::istream e altre classi di support per l'input.
<ostream>
Fornisce std::ostream e altre classi di supporto per l'output.
<spanstream>
Novità in C++23. Fornisce std::spanstream and other fixed character buffer I/O streams.
<sstream>
Fornisce std::stringstream and other supporting classes for string manipulation.
<streambuf>
Fornisce reading and writing functionality to/from certain types of character sequences, such as external files or strings.
<syncstream>
Novità in C++20. Fornisce std::osyncstream and other supporting classes for synchronized output streams.

Libreria di supporto dei thread modifica

<barrier>
Novità in C++20. Fornisce std::barrier, a reusable thread barrier.
<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.
<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.
<latch>
Novità in C++20. Fornisce std::latch, a single-use thread barrier.
<mutex>
Novità in C++11. In 32.5-1, this section Fornisce mechanisms for mutual exclusion: mutexes, locks, and call once.
<shared_mutex>
Novità in C++14. Fornisce funzioni per la mutua esclusione condivisa.
<semaphore>
Novità in C++20. Fornisce semafori che modellano un conteggio non negativo delle risorse.
<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.
<thread>
Novità in C++11. Provide class and namespace for working with threads.

Libreria numerica modifica

Components that C++ programs may use to perform seminumerical operations.

<bit>
Novità in C++20. Fornisce funzioni per la manipolazione dei bit.
<complex>
Definisce a class template std::complex, and numerous functions for representing and manipulating complex numbers.
<numbers>
Novità in C++20. Fornisce mathematical constants defined in namespace std::numbers.
<random>
Novità in C++11. Contiene funzioni per generare numeri e ripartizioni (pseudo-)casuali.
<ratio>
Novità in C++11. Fornisce compile-time rational arithmetic based on class templates.
<valarray>
Definisce five class templates (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>
Per le operazioni numeriche generalizzate.

Libreria C modifica

  Lo stesso argomento in dettaglio: Libreria standard del C.

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'.[6]

Questi header in molti casi includono internamente gli header C originali, con l'unica differenza che, ove possibile, le dichiarazioni ricadono nel namespace std.[6]

Note modifica

  1. ^ (EN) C++ standards, su open-std.org.
  2. ^ a b (EN) C++ standard library headers, su en.cppreference.com.
  3. ^ (EN) C++ standard library index, su en.cppreference.com.
  4. ^ (EN) Bartlomiej Filipek, Polymorphic Allocators, std::vector Growth and Hacking, su bfilipek.com. URL consultato il 30 aprile 2021.
  5. ^ (EN) Working Draft, Standard for Programming Language C++ (PDF), in ISO/IEC, 1º aprile 2020, p. 492. URL consultato il 30 aprile 2021.
  6. ^ a b C standard library in C++, su en.cppreference.com.

Voci correlate modifica

Collegamenti esterni modifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica