ISO-kommittén för standardisering av C++-sprÄket den internationella standarden "". De funktioner som presenteras i specifikationen, med undantag för enstaka fall, i kompilatorer , och . Standardbiblioteken som stödjer C++20 har implementerats inom ramen för projektet .
Under de kommande tvÄ mÄnaderna kommer den godkÀnda specifikationen att vara i förberedelsefasen för publicering, dÀr arbetet med att redigera stavfel och tryckfel kommer att genomföras. I början av november kommer den slutliga 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 standard C++23 (C++2b) och kommer att diskutera potentiella .
():
- Koncept har lagts till, vilket Àr en utvidgning av mallar som gör det möjligt att definiera ett set av krav pÄ mallparameterar som begrÀnsar uppsÀttningen av argument som kan tas emot som mallparametrar under kompileringen. Koncept kan anvÀndas för att undvika logiska inkonsekvenser mellan egenskaperna hos datatyper som anvÀnds inom mallen och egenskaperna hos datatyperna för inparametrarna.
template
concept EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - För att arbeta med moduler som kan anvÀndas istÀllet för header-filer. Moduler erbjuder ett nytt sÀtt att organisera kÀllkod baserat pÄ definitioner av komponentgrÀnser, utan att anvÀnda inkluderade header-filer med "#include". Makrot __VA_OPT__ för adaptiv upplösning av variadikmakron beroende pÄ förekomsten av token i den variadiska parametern.
- Stöd för operatorn "" för trevÀgsjÀmförelse.
- Stöd för standardelements initialiserare för bitfÀlt.
- Möjlighet till lambda-fÄngst av uttrycket "*this".
- struct int_value {
int n = 0;
auto getter_fn() {
return [=, *this]() { return n; };
// BAD:
// return [=]() { return n; };// GOOD:
Anrop av medlemmar via pekare (Pointer-to-member), med hjÀlp av pekare till temporÀra objekt definierade genom uttrycket "const &".
}
}; - Delete-operator med destruktör som beskrivs i dokumentet
- P0722R1 .
- struct foo {
foo() = default;
constexpr foo(int) {}
template
};auto get_foo() {
return f;
get_foo(); // anvÀnder implicit konstruktor
}get_foo();
get_foo<foo{123}>(); - Icke-sparade lambda-uttryck med konstruktor.
- TillÀmpbarheten av mallsyntax för lambda-uttryck ("auto f = [](std::vector v)").
- Möjlighet att anvÀnda strÀngliteraler i mallparametrar.
- Stöd för C-liknande initialiseringssyntax - fÀlt som inte anges i initialiseringslistan initieras som standard.
struct A {
int x;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2
- Stöd för tomma datamedlemmar.
- Stöd för attributen likely och unlikely för att informera optimeraren om sannolikheten för att en villkorsstruktur intrÀffar ("[[likely]] if (random > 0) {").
- Möjlighet att anvÀnda intervall för att initiera vÀrden i en "for"-loop.
for (auto v = std::vector{1, 2, 3}; auto& e : v) {
- Automatisk berÀkning av storleken pÄ en array i new ("new double[]{1,2,3}");
- Attributet "[[no_unique_address]]" dÀr variabler utan data inte tar upp plats.
- Atomiska pekare (std::atomic<shared_ptr> och std::atomic<weak_ptr>).
- Möjlighet att anropa virtuella funktioner i villkorsuttryck.
- Stöd för omedelbara funktioner (immediate) som endast kan arbeta med konstantvÀrden.
consteval int sqr(int n) {
return n * n;
}constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // FEL: 'x' kan inte anvÀndas som konstant - Möjlighet att tillÀmpa constexpr med virtuella funktioner ("constexpr virtual int f() const { return 2; }").
- I standardbiblioteket:
- Stöd för typen char8_t för UTF-8-strÀngar har lagts till.
- Headerfilerna bit (bitoperationer) och version har lagts till.
- Möjlighet att kontrollera prefix och suffix pÄ strÀngar (starts_with, ends_with).
- Typer som std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible och std::type_identity har lagts till.
- Funktioner som std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated och std::assume_aligned har lagts till.
- Support för arrayer har lagts till i std::make_shared.
- Funktionen std::to_array för att konvertera array-liknande objekt till std::array har lagts till.
- Mer anvÀndarvÀnlig syntax för enumerationer:
enum class rgba_color_channel { red, green, blue, alpha };
std::string_view to_string(rgba_color_channel my_channel) {
switch (my_channel) {
using enum rgba_color_channel;
case red: return "red";
case green: return "green";
case blue: return "blue";
case alpha: return "alpha";
}
} - I indexerna Ă€r anvĂ€ndningen av operationen «,» («a[b,c]») förbjuden pĂ„ grund av oförutsĂ€gbart beteende. Stödet för de flesta operationerna med variabler deklarerade med nyckelordet volatile har upphört, inklusive operationerna «++» och «â» med standardtyper.
- Antalet situationer dÀr det krÀvs att ange «typename» för att informera om förekomsten av en typ har minskat.
KĂ€lla: opennet.ru
