C 17-Funktionen
C 17 führt eine Fülle neuer Funktionen in die Sprache ein, wodurch ihre Fähigkeiten erheblich erweitert und ihre Benutzerfreundlichkeit verbessert werden. Diese Ergänzungen umfassen verschiedene Aspekte der Sprache, von Vorlagenverbesserungen und Lambda-Verbesserungen bis hin zu Bibliotheksergänzungen und veralteten Elementen.
Sprachfunktionen
Vorlagen und generischer Code:
-
Abzug von Vorlagenargumenten für Klassenvorlagen: Konstrukteure können jetzt Vorlagenargumente ableiten, ähnlich wie bei Funktionen.
-
Vorlagenargument: Stellt einen Wert eines beliebigen Nicht-Typ-Vorlagenargumenttyps dar.
-
Überarbeitung Nicht-Typ-Vorlagenargumente: Es wurden mehrere Korrekturen und Überarbeitungen an Nicht-Typ-Vorlagen vorgenommen Argumente.
Lambda:
-
Constexpr Lambdas: Lambdas können jetzt explizit als constexpr markiert werden, wenn sie bestimmte Anforderungen erfüllen .
-
Dies in Lambdas erfassen:Lambdas können Erfassen Sie nun diesen Zeiger und ermöglichen Sie den Zugriff auf Mitgliedsvariablen und -methoden.
Attribute:
-
Neue Attribute: Attribute wie [[fallthrough]], [[nodiscard]] und [[maybe_unused]] wurden eingeführt, um die Klarheit des Codes zu verbessern und Lesbarkeit.
-
Attribute auf Namespaces und Enumeratoren: Attribute können jetzt mit [[attributes]] auf Namespaces und Enumeratoren angewendet werden.
Syntaxbereinigung :
-
Inline Variablen: Variablen können jetzt inline deklariert werden, sodass der Compiler ihre Definitionen einbinden kann.
-
Vereinfachte Namespace-Deklaration: Die Namespace-A::B-Syntax wurde für prägnante Namespace-Deklarationen eingeführt .
-
Vereinfachtes static_assert: static_assert-Anweisungen können jetzt verwendet werden ohne String-Argument.
Saubere Multi-Return- und Flusskontrolle:
-
Strukturierte Bindungen: Strukturierte Bindungen ermöglichen mehr bequemes Entpacken von Tupeln und anderen Datenstrukturen in Deklarationen.
-
Bedingte Anweisungen mit Initialisierung: if (init; Bedingung) und Schalter (Init; Bedingung) bieten mehr Flexibilität in bedingten Anweisungen.
-
Bereichsbasierte For-Schleifen verallgemeinern: Bereichsbasierte For-Schleifen unterstützen jetzt Sentinels (Enditeratoren), die sich von unterscheiden die Anfangsiteratoren.
-
if constexpr: if constexpr ermöglicht die bedingte Kompilierung basierend auf Konstanten zur Kompilierungszeit.
Andere:
-
Hexadezimale Gleitkomma-Literale:Gleitkomma-Literale können jetzt im Hexadezimalformat ausgedrückt werden.
-
Dynamische Speicherzuweisung für überausgerichtete Daten: Verbesserte Unterstützung für die dynamische Speicherzuweisung von Overaligned Daten.
-
Garantierte Kopierelision: Bestimmte Szenarien, in denen die Kopierelision nicht garantiert wurde, verfügen jetzt über explizite Garantien.
-
Verbesserte Bewertungsreihenfolge: Die Regeln für die Bewertungsreihenfolge für bestimmte Ausdrücke wurden aus Gründen der Klarheit überarbeitet Verhalten.
Bibliotheksergänzungen
Datentypen:
-
std::variant: Ein Polymorph Typ, der einen Wert von einer von mehreren Alternativen enthalten kann Typen.
-
std::optional: Stellt einen optionalen Wert dar, der einen Wert enthalten kann oder auch nicht.
-
std::any: A Typgelöschter Container, der einen beliebigen Wert enthalten kann type.
-
std::string_view: Ein Verweis auf eine Zeichenfolge, ähnlich wie const char*.
-
std::byte: A Typ zur Darstellung von Rohdaten Bytes.
Dienstprogramme:
-
std::invoke: Ruft ein Callable mit angegebenen Argumenten auf und unterstützt verschiedene Arten von Callables.
-
std::apply: Entpackt ein Tupel und übergibt seine Elemente als Argumente an ein Callable.
-
std::invoke_result und verwandte Konzepte: Konzepte und Typen zur Bestimmung der Gültigkeit und des Ergebnisses des Aufrufs eines Callables mit gegebenen Argumenten.
Dateisystembibliothek (TS v1):
- Klassen und Funktionen für die Arbeit mit Dateisystemen, Verzeichnissen und Dateien.
Neu Algorithmen:
- for_each_n
- reduce
- transform_reduce
- exclusive_scan
- inclusive_scan
- transform_exclusive_scan
- transform_inclusive_scan
Threading:
-
std::shared_mutex: Ein gemeinsam genutzter Mutex, der mehrere Leser, aber nur einen Schreiber zulässt.
-
atomic::is_always_lockfree: Gibt an, ob ein atomarer Typ in allen Fällen sperrenfrei ist.
-
scoped_lock:: Sperrt mehrere Mutexe gleichzeitig, Vereinfachtes Sperren und Entsperren.
(Teilweise) Library Fundamentals Library (TS v1):
- Funktionalität zum Durchführen von Suchen und Arbeiten mit polymorphen Allokatoren.
Behälter Verbesserungen:
-
try_emplace und insert_or_assign:Verbesserte Methoden zum Einfügen von Containern zur Handhabung bestimmter Szenarien.
-
Spleißen für Container: Effizient Verschieben von Knoten dazwischen Container.
Änderungen am Smart Pointer:
- Korrekturen und Optimierungen an std::unique_ptr und anderen Smart Pointern.
Zusätzliche Verbesserungen:
-
Trivial kopierbar std::reference_wrapper: Verbessert die Leistung in bestimmten Fällen.
-
Aktualisierte C11-Bibliothek: Die C 17-Standardbibliothek basiert auf C11 , wodurch Kompatibilität mit modernen Systemen gewährleistet wird.
-
Veraltet Elemente:Verschiedene Elemente aus früheren Versionen des C-Standards sind veraltet.
Features in C 1z (Erwartet für C 17)**
Um festzustellen, welche Features aus Da der C 1z-Arbeitsentwurf in C 17-Compilern verfügbar sein wird, wird empfohlen, die Dokumentation und Versionshinweise der einzelnen Compiler zu konsultieren. Nicht alle Funktionen von C 1z werden zwangsläufig in jedem C 17-Compiler implementiert.
Bitte beachten Sie, dass in dieser Zusammenfassung nicht alle Änderungen oder Funktionen erwähnt wurden. Eine umfassende Liste finden Sie im C 17-Standarddokument oder in anderen seriösen Quellen.
Das obige ist der detaillierte Inhalt vonWas sind die wichtigsten Sprachfunktionen, Bibliothekserweiterungen und veralteten Elemente, die in C 17 eingeführt wurden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!