ISO C++ standardiseringskommittén internationell standard""De funktioner som presenteras i specifikationen, med undantag för enstaka fall, i kompilatorer , О Standardbibliotek som stöder C++20 implementeras inom projektet. .
Under de kommande tvÄ mÄnaderna kommer den godkÀnda specifikationen att vara i dokumentförberedelsefasen, dÀr redaktionellt arbete kommer att utföras för att korrigera stavfel och skrivfel. I början av november kommer den resulterande versionen av dokumentet att skickas till ISO för publicering under det formella namnet ISO/IEC 14882:2020. Under tiden har kommittén redan pÄbörjat arbetet med nÀsta C++23-standard (C++2b) och kommer att övervÀga möjliga förbÀttringar vid sitt nÀsta virtuella möte. .
():
- "Koncept" har lagts till, malltillÀgg som lÄter dig definiera en uppsÀttning krav för mallparametrar som vid kompileringstid begrÀnsar uppsÀttningen argument som kan accepteras som mallparametrar. Koncept kan anvÀndas för att undvika logiska inkonsekvenser mellan egenskaperna för de datatyper som anvÀnds i en mall och egenskaperna för datatyperna för inparametrarna.
mall
konceptet LikhetJÀmförbar = krÀver(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - Följande har antagits till sammansÀttningen: för att arbeta med moduler, vilka kan anvÀndas istÀllet för headerfiler. Moduler ger ett nytt sÀtt att organisera kÀllkod baserat pÄ definierade komponentgrÀnser, utan att headerfiler behöver inkluderas via "#include".
- Makro __VA_OPT__ för adaptiv expansion av variadiska makron beroende pÄ förekomsten av tokens i det variadiska argumentet.
- Stöd för operatorn "" för trevÀgsjÀmförelse.
- Stöd för standardelementinitialiserare för bitfÀlt.
- Möjlighet till lambda-insamling av "*this"-uttryck.
struktur int_value {
int n = 0;
automatisk getter_fn() {
// DĂ LIGT:
// returnera [=]() { returnera n; };// BRA:
returnera [=, *detta]() { returnera n; };
}
}; - Pekare-till-medlem-Ätkomst med hjÀlp av pekare till temporÀra objekt definierade via uttrycket "const &".
- Delete-operatorn med en destructor som beskrivs i dokumentet .
- Klasser tillÄts anvÀnda mallparametrar utan typ.
struktur foo {
foo() = standard;
constexpr foo(int) {}
};mall
automatiskt get_foo() {
returnera f;
}get_foo(); // anvÀnder implicit konstruktor
get_foo (); - Icke-persistenta lambda-uttryck med konstruktor.
- TillÄtelse för att anvÀnda mallsyntax för lambda-uttryck ('auto f = [] (std::vektor v)»).
- Möjlighet att anvÀnda strÀngliteraler i mallparametrar.
- Stöd för initialiseringssyntax i C-stil â fĂ€lt som inte uttryckligen listas i initialiseringslistan initieras som standard.
struktur A {
intx;
int y;
heltal z = 123;
};A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2
- Stöd för tomma medlemmar i datastrukturer.
- Stöd för attributen sannolikt och osannolikt för att informera optimeraren om sannolikheten för att en villkorlig konstruktion utlöses ("[[sannolikt]] if (random > 0) {").
- Möjlighet att anvÀnda intervall för att initiera variabelvÀrden i en for-loop
för (auto v = std::vektor{1, 2, 3}; auto& e: v) {
- Automatisk berÀkning av arraystorlek i new ("new double[]{1,2,3}");
- Attributet "[[no_unique_address]]" sÀkerstÀller att variabler utan data inte tar upp plats.
- Atompekare (std::atomic > och std::atomic >).
- Möjlighet att anropa virtuella funktioner i villkorliga uttryck.
- Stöd för omedelbara funktioner som bara kan fungera med konstanter.
konstant int kvadrat(int n) {
returnera n * n;
}constexpr int r = kvadrat(100); // OK
int x = 100;
int r2 = sqr(x); // FEL: 'x' kan inte anvÀndas som en konstant - Möjlighet att anvÀnda constexpr med virtuella funktioner ("constexpr virtual int f() const { return 2; }").
- I standardbiblioteket:
- Lade till stöd för char8_t-typen för UTF-8-strÀngar.
- Lade till bit (bitoperationer) och versionsheaderfiler.
- Det Àr nu möjligt att kontrollera prefixet och suffixet för strÀngar (börjar_med, slutar_med).
- Lade till egenskaperna std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible och std::type_identity.
- Lade till funktionerna std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated och std::assume_aligned.
- Lade till stöd för arrayer till std::make_shared.
- Lade till funktionen std::to_array för att konvertera array-liknande objekt till std::array.
- En mer praktisk syntax för upprÀkningar:
enum-klass rgba_color_channel { röd, grön, blÄ, alfa };
std::string_view to_string(rgba_color_channel my_channel) {
byta (min_kanal) {
anvÀnder enum rgba_color_channel;
gemenrött: returnera "rött";
gemen grönt: returnera "grönt";
skiftlÀge blÄtt: returnera "blÄ";
case alpha: returnera "alpha";
}
} - Operatorn "," ("a[b,c]") Ă€r inte lĂ€ngre tillĂ„ten i index pĂ„ grund av odefinierat beteende. De flesta operationer pĂ„ variabler som deklarerats med nyckelordet volatile stöds inte lĂ€ngre, inklusive operatorerna "++" och "â" pĂ„ standardtyper.
- Minskade antalet situationer dÀr det krÀvs att "typnamn" anges för att indikera nÀrvaron av en typ.
KĂ€lla: opennet.ru
