C++20
Aparença
Tipus | edició d'estàndard ISO |
---|---|
Versió inicial | 2020 |
Epònim | 2020 |
Característiques tècniques | |
Plataforma | C standard library |
Més informació | |
Lloc web | iso.org… (anglès) |
| |
← C++17 C++23 → |
C++20 és una versió de l'estàndard ISO / IEC 14882 per al llenguatge de programació C++. C++20 va substituir la versió anterior de l'estàndard C++, anomenada C++17.[1] L'estàndard va ser finalitzat tècnicament [2] pel WG21 a la reunió a Praga el febrer de 2020,[3] va tenir el seu esborrany final anunciat el març de 2020,[4] es va aprovar el 4 de setembre de 2020,[5][6] i es va publicar al desembre de 2020.[7]
Característiques
[modifica]C++20 afegeix més funcions principals noves que C++14 o C++17.[8] Els canvis que s'han acceptat a C++20 inclouen: [9]
Llenguatge
[modifica]- conceptes, amb sintaxi concisa
- mòduls
- inicialitzadors designats (basats en la característica C99 i l'extensió comuna g++)
[=, this]
com a captura lambda- llistes de paràmetres de plantilla a lambdas
- comparació de tres direccions mitjançant l'operador "operador de nau espacial",
operator < = >
- inicialització d'una variable addicional dins
for
una declaració basada en intervals - lambdas en contextos no avaluats
- Lambdas sense estat construïbles i assignables per defecte
- permet expansions de paquets a lambda init-capture
- tipus de classe en paràmetres de plantilla no tipus, també permetent literals de cadena com a paràmetres de plantilla
- eliminació de la necessitat del
typename
en determinades circumstàncies - nous atributs estàndard
[[no_unique_address]]
,[[likely]]
i[[unlikely]]
- condicional
explicit
, permetent que el modificadorexplicit
sigui contingent d'una expressió booleana constexpr
expandit: funcions virtuals,union
,try
andcatch
,dynamic_cast
itypeid
,std::pointer_traits
- funcions immediates utilitzant la nova paraula clau
consteval
- Els nombres enters amb signe es defineixen ara per ser representats utilitzant el complement de dos (el desbordament de nombres enters amb signe segueix sent un comportament sense definir)
- un model de memòria revisat
- diverses millores a les unions estructurades (interacció amb captures lambda, durada d'emmagatzematge
static
ithread_local
) - corrutines
using
l'enumeració ambenum
s- paraula clau
constinit
Biblioteca
[modifica]- rangs (The One Ranges Proposal)
std::make_shared
istd::allocate_shared
per a matrius- punters intel·ligents atòmics (com ara
std::atomic<shared_ptr<T>>
istd::atomic<weak_ptr<T>>
) std::to_address
per convertir un punter en un punter en brut- addicions de calendari i fus horari a
<chrono>
std::span
, proporcionant una vista a una matriu contigua (anàloga astd::string_view
peròspan
pot mutar la seqüència de referència)std::erase
istd::erase_if
, simplificant l'esborrat d'elements per a la majoria de contenidors estàndard<version>
capçalerastd::bit_cast<>
per al càsting de tipus de representacions d'objectes, amb menys verbositat quememcpy()
i més capacitat per explotar els components interns del compilador- macros de prova de característiques
- diversos bits de biblioteca constexpr
- creació de punter intel·ligent amb inicialització predeterminada
contains
-mètode per a contenidors associatius- operacions de bits, com ara el recompte zero/un inicial/final, i operacions log2
std::bind_front
Referències
[modifica]- ↑ «The Standard» (en anglès). isocpp.org. Arxivat de l'original el 19 setembre 2020. [Consulta: 7 setembre 2020].
- ↑ Sutter, Herb. «P1000R3: C++ IS schedule» (en anglès), 01-10-2019. Arxivat de l'original el 2019-11-14. [Consulta: 13 febrer 2020].
- ↑ Dusíková, Hana. «N4817: 2020 Prague Meeting Invitation and Information» (en anglès), 06-11-2019. Arxivat de l'original el 2019-12-29. [Consulta: 13 febrer 2020].
- ↑ «N4859 Editors' Report -- Programming Languages -- C++» (en anglès). Arxivat de l'original el 2022-12-09. [Consulta: 22 setembre 2023].
- ↑ «Current Status» (en anglès). isocpp.org. Arxivat de l'original el 8 setembre 2020. [Consulta: 7 setembre 2020].
- ↑ «C++20 Approved -- Herb Sutter» (en anglès). isocpp.org. Arxivat de l'original el 11 setembre 2020. [Consulta: 8 setembre 2020].
- ↑ «ISO/IEC 14882:2020» (en anglès). Arxivat de l'original el 2020-12-16. [Consulta: 16 desembre 2020].
- ↑ «Why does the C++ standard ship every three years?» (en anglès), 13-07-2019. Arxivat de l'original el 13 juliol 2019. [Consulta: 19 juliol 2019].
- ↑ «P0592R0: To boldly suggest an overall plan for C++20» (en anglès). Arxivat de l'original el 2017-03-08. [Consulta: 6 maig 2017].