Der Standard C++20 wurde genehmigt

Der ISO-Ausschuss fĂŒr die Standardisierung der Programmiersprache C++ genehmigte den internationalen Standard „C++20“. Die in der Spezifikation beschriebenen Möglichkeiten werden, mit Ausnahme einzelner FĂ€lle, von den Compilern GCC Clang, Microsoft Visual C++ und . Die C++20 unterstĂŒtzenden Standardbibliotheken sind im Rahmen des ProjektsBoost In den nĂ€chsten zwei Monaten wird die genehmigte Spezifikation in der Phase der Dokumentenvorbereitung zur Veröffentlichung sein, in der an der redaktionellen Bearbeitung von Rechtschreibfehlern und Druckfehlern gearbeitet wird. Anfang November wird die resultierende Version des Dokuments zur Veröffentlichung an die ISO unter dem formalen Namen ISO/IEC 14882:2020 gesendet. In der Zwischenzeit hat der Ausschuss bereits mit der Arbeit am nĂ€chsten Standard C++23 (C++2b) begonnen und wird beim nĂ€chsten virtuellen Treffen mögliche.

Merkmale Neuheiten.

Haupt- Beispielcodes C++20 („Konzepte“ hinzugefĂŒgt, die Vorlagen erweitern und es ermöglichen, eine Reihe von Anforderungen an die Vorlagenparameter zu definieren, die beim Kompilieren die Menge der Argumente einschrĂ€nken, die als Vorlagenparameter akzeptiert werden können. Konzepte können verwendet werden, um logische Inkonsistenzen zwischen den Eigenschaften der Datentypen, die innerhalb der Vorlage verwendet werden, und den Eigenschaften der Datentypen der Eingabeparameter zu vermeiden.):

  • template

    concept EqualityComparable = requires(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    In die angenommenen
    };

  • Erweiterungen fĂŒr die Arbeit mit Modulen, die anstelle von Header-Dateien verwendet werden können. Module bieten einen neuen Weg zur Organisation von Quelltexten, basierend auf der Definition von Komponentenbereichen, ohne ĂŒber „#include“ eingebundene Header-Dateien. Das Makro __VA_OPT__ fĂŒr die adaptive Entfaltung variabler Makros in AbhĂ€ngigkeit von der VerfĂŒgbarkeit von Tokens im variablen Argument.
  • UnterstĂŒtzung des Operators „“ fĂŒr den dreifachen Vergleich.
  • UnterstĂŒtzung von Standardwertinitialisierern fĂŒr Bitfelder.
  • Möglichkeit des Lambda-Zugriffs auf AusdrĂŒcke „*this“.
  • struct int_value {

    int n = 0;
    auto getter_fn() {
    return [=, *this]() { return n; };
    // BAD:
    // return [=]() { return n; };

    // GOOD:
    Aufruf von Elementen ĂŒber einen Zeiger (Pointer-to-member), unter Verwendung von ĂŒber den Ausdruck „const &“ definierten Zeigern auf temporĂ€re Objekte.
    }
    };

  • Der Operator delete mit einem im Dokument beschriebenen Destruktor
  • P0722R1 Klassen ist die Verwendung von Vorlagenparametern ohne Typ erlaubt..
  • struct foo {

    foo() = default;
    constexpr foo(int) {}
    template
    };

    template
    auto get_foo() {
    return f;
    }

    get_foo(); // verwendet impliziten Konstruktor
    get_foo();

  • Nicht speicherbare Lambda-AusdrĂŒcke mit Konstruktor.
  • ZulĂ€ssigkeit der Verwendung von Vorlagen-Syntax fĂŒr Lambda-AusdrĂŒcke ("auto f = [](std::vector v)").
  • Möglichkeit der Verwendung von String-Literalen in Vorlagen-Parametern.
  • UnterstĂŒtzung der C-Stil Initialisierungssyntax – nicht explizit aufgelistete Felder in der Initialisierungsliste werden standardmĂ€ĂŸig initialisiert.

    struct A {
    int x;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2

  • UnterstĂŒtzung leerer Mitglieder in Datenstrukturen.
  • UnterstĂŒtzung der Attribute likely und unlikely zur Informierung des Optimierers ĂŒber die Wahrscheinlichkeit des Eintretens einer Bedingung ("[[likely]] if (random > 0) {").
  • Möglichkeit, Bereiche zur Initialisierung von Variablenwerten in der "for"-Schleife zu verwenden

    for (auto v = std::vector{1, 2, 3}; auto& e : v) {

  • Automatische Berechnung der Array-GrĂ¶ĂŸe bei new ("new double[]{1,2,3}");
  • Attribut "[[no_unique_address]]", wobei variablen ohne Daten keinen Platz beanspruchen.
  • Atomare Zeiger (std::atomic<shared_ptr> und std::atomic<weak_ptr>).
  • Möglichkeit, virtuelle Funktionen in bedingten AusdrĂŒcken aufzurufen.
  • UnterstĂŒtzung fĂŒr sofortige Funktionen, die nur mit Konstanten arbeiten können.

    consteval int sqr(int n) {
    return n * n;
    }

    constexpr int r = sqr(100); // OK
    int x = 100;
    int r2 = sqr(x); // FEHLER: 'x' kann nicht als Konstante verwendet werden

  • Möglichkeit, constexpr mit virtuellen Funktionen zu verwenden ("constexpr virtual int f() const { return 2; }").
  • In der Standardbibliothek:
    • UnterstĂŒtzung fĂŒr den Typ char8_t fĂŒr UTF-8-Strings wurde hinzugefĂŒgt.
    • Die Header-Dateien bit (bitweise Operationen) und version wurden hinzugefĂŒgt.
    • Möglichkeit zur ÜberprĂŒfung von PrĂ€fixen und Suffixen von Strings (starts_with, ends_with).
    • Die Typideen std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible und std::type_identity wurden hinzugefĂŒgt.
    • Funktionen wie std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated und std::assume_aligned wurden hinzugefĂŒgt.
    • std::make_shared unterstĂŒtzt jetzt Arrays.
    • Die Funktion std::to_array wurde hinzugefĂŒgt, um array-Ă€hnliche Objekte in std::array zu konvertieren.
  • Ein benutzerfreundlicherer Syntax fĂŒr AufzĂ€hlungen:

    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";
    }
    }

  • In den Indizes ist die Verwendung der Operation „,“ („a[b,c]“) aufgrund unbestimmten Verhaltens verboten. Die UnterstĂŒtzung fĂŒr die meisten Operationen mit Variablen, die mit dem SchlĂŒsselwort volatile deklariert sind, wurde eingestellt, einschließlich der Operationen „++“ und „—“ mit Standardtypen.
  • Die Anzahl der Situationen, in denen „typename“ zur Information ĂŒber die Existenz eines Typs angegeben werden muss, wurde reduziert.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster