# C++20

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. L'estàndard va ser finalitzat tècnicament pel WG21 a la reunió a Praga el febrer de 2020, va tenir el seu esborrany final anunciat el març de 2020, es va aprovar el 4 de setembre de 2020, i es va publicar al desembre de 2020.

## Característiques

C++20 afegeix més funcions principals noves que C++14 o C++17. Els canvis que s'han acceptat a C++20 inclouen:

### Llenguatge

* 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 modificador explicit sigui contingent d'una expressió booleana
* constexpr expandit: funcions virtuals, union, try and catch, dynamic_cast i typeid, 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 i thread_local)
* corrutines
* using l'enumeració amb enum s
* paraula clau constinit

### Biblioteca

* rangs (The One Ranges Proposal)
* std::make_shared i std::allocate_shared per a matrius
* punters intel·ligents atòmics (com ara std::atomic<shared_ptr<T>> i std::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 a std::string_view però span pot mutar la seqüència de referència)
* std::erase i std::erase_if, simplificant l'esborrat d'elements per a la majoria de contenidors estàndard
* <version> capçalera
* std::bit_cast<> per al càsting de tipus de representacions d'objectes, amb menys verbositat que memcpy 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

* ↑ «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].