Heim > Backend-Entwicklung > C++ > Was sind die wichtigsten Sprachfunktionen, Bibliothekserweiterungen und veralteten Elemente, die in C 17 eingeführt wurden?

Was sind die wichtigsten Sprachfunktionen, Bibliothekserweiterungen und veralteten Elemente, die in C 17 eingeführt wurden?

Mary-Kate Olsen
Freigeben: 2024-12-08 11:10:19
Original
504 Leute haben es durchsucht

What are the key language features, library additions, and deprecated elements introduced in C  17?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage