Libreria standard C++: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: rimuovo righe in eccesso (vedi richiesta) |
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.9.5 |
||
(27 versioni intermedie di 15 utenti non mostrate) | |||
Riga 1:
{{S|
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, 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>
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"/>
== Storia ==
{{...|informatica}}
== Implementazioni ==
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]].
{| 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++}}
|