C++20

De la Viquipèdia, l'enciclopèdia lliure
C++20

Tipusedició d'estàndard ISO Modifica el valor a Wikidata
Versió inicial2020 Modifica el valor a Wikidata
Epònim2020 Modifica el valor a Wikidata
Característiques tècniques
PlataformaC standard library
Més informació
Lloc webiso.org… (anglès) Modifica el valor a Wikidata


C++17 Modifica el valor a Wikidata
C++23 Modifica el valor a Wikidata

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 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[modifica]

  • 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[modifica]

  1. «The Standard» (en anglès). isocpp.org. Arxivat de l'original el 19 setembre 2020. [Consulta: 7 setembre 2020].
  2. Sutter, Herb. «P1000R3: C++ IS schedule» (en anglès), 01-10-2019. Arxivat de l'original el 2019-11-14. [Consulta: 13 febrer 2020].
  3. 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].
  4. «N4859 Editors' Report -- Programming Languages -- C++» (en anglès). Arxivat de l'original el 2022-12-09. [Consulta: 22 setembre 2023].
  5. «Current Status» (en anglès). isocpp.org. Arxivat de l'original el 8 setembre 2020. [Consulta: 7 setembre 2020].
  6. «C++20 Approved -- Herb Sutter» (en anglès). isocpp.org. Arxivat de l'original el 11 setembre 2020. [Consulta: 8 setembre 2020].
  7. «ISO/IEC 14882:2020» (en anglès). Arxivat de l'original el 2020-12-16. [Consulta: 16 desembre 2020].
  8. «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].
  9. «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].