Heim > Backend-Entwicklung > C++ > Was sind die wichtigsten neuen Funktionen und Verbesserungen, die in C 17 eingeführt wurden?

Was sind die wichtigsten neuen Funktionen und Verbesserungen, die in C 17 eingeführt wurden?

Barbara Streisand
Freigeben: 2024-12-11 17:17:11
Original
663 Leute haben es durchsucht

What are the Key New Features and Enhancements Introduced in C  17?

Was sind die neuen Funktionen in C 17?

C 17 führt eine Reihe neuer Funktionen und Verbesserungen in die Sprache ein, darunter:

  • Sprache Funktionen:

    • Abzug von Vorlagenargumenten für Klassenvorlagen
    • Vorlage zur Darstellung von Werten aller Nichttyp-Vorlagenargumenttypen
    • Korrekturen für Nichttyp-Vorlagenargumente
    • Unterstützung für Vorlagenvorlagen
    • Erweiterte Faltung und ... Ausdrücke
    • auto x{8} als Ganzzahl
    • Modernisieren mit ... und Listen
    • Constexpr-Lambdas
    • Erfassung in Lambdas
    • Attribute wie [[fallthrough]], [[nodiscard]], [[maybe_unused]]
    • Attribute für Namespaces und Enumeratoren
    • Die Verwendung in Attributen sollte vermieden werden sich wiederholende Attribut-Namespaces
    • Compiler müssen nicht standardmäßige Attribute ignorieren, die sie nicht erkennen
    • Inline-Variablen
    • Namespace-Aliase (z. B. Namespace A::B)
    • Simple static_assert(expression); ohne String
    • No throw eliminieren und durch throw() und noexclusive(true) ersetzen
  • Sauberere Multi-Return- und Flusskontrolle:

    • Strukturierte Bindungen zur Vereinfachung der Mehrfachrückgabe Werte
    • if (init; Bedingung) und Switch (init; Bedingung) für erweiterte if- und switch-Anweisungen
    • Bereichsbasierte Verallgemeinerung von for-Schleifen für Sentinels und benutzerdefinierte Iteratoren
    • if constexpr für fast generisch Code
  • Verschiedenes:

    • Hexadezimale Gleitkomma-Literale
    • Dynamische Speicherzuweisung für Überausrichtung Daten
    • Garantierte Kopie Elision
    • Feste Auswertungsreihenfolge für Ausdrücke
    • Direkte Listeninitialisierung von Aufzählungen
    • Vorwärtsfortschrittsgarantien (FPGs)
    • Zeichenliterale u8'U ', u8'T', u8'F', u8'8'
    • noexclude im Typsystem
    • __has_include zum Testen auf Fehler beim Einschließen von Header-Dateien
    • Arrays von Zeigerkonvertierungskorrekturen
    • Korrekturen für geerbte Konstruktoren und Aggregatinitialisierung mit Vererbung
    • Hilfsfunktionen für den Standardtyp Wortspiel
  • Bibliotheksergänzungen:

    • Datentypen:

      • std::variant für getaggte Union Typen
      • std::optional für nullfähige Werte
      • std::any für jeden Werttyp
      • std::string_view als Referenz auf ein Zeichenarray oder eine Teilzeichenfolge
      • std::byte als weder Ganzzahl noch Zeichen, sondern einfach Daten
    • Zeug aufrufen:

      • std::invoke für generische Funktionsaufrufe
      • std::apply für das Entpacken von Tupeln in Funktionsaufrufe
      • std::make_from_tuple und std::apply für die Objektkonstruktion
      • is_invocable, is_invocable_r und invoke_result für den Funktionsaufruf Funktionalität
    • Dateisystem TS v1: Verbesserte Dateisystemoperationen
    • Neue Algorithmen: for_each_n, Reduce, Transform_Reduce, Exclusive_Scan , inclusive_scan, transform_exclusive_scan und transform_inclusive_scan
    • Threading: std::shared_mutex, atomic::is_always_lockfree undscoped_lock
    • Parallelität TS v1: Parallele Versionen von Algorithmen und verwandten Maschinen
    • Bibliotheksgrundlagen TS v1:Suchalgorithmen, polymorpher Allokator (PMR), Sampling
    • Container-Verbesserungen: try_emplace und insert_or_assign, Spleißen für Karten und setzt, Nicht-Const .data() für Strings, Nicht-Member std::size, std::empty, std::data, minimale unvollständige Typunterstützung in Containern, zusammenhängendes Iterator-„Konzept“, constexpr-Iteratoren, aktualisierte Konstruktoren für die Emplace-Funktionsfamilie
    • Änderungen am intelligenten Zeiger: Korrekturen zu unique_ptr und Tweaks zu schwach_from_this und geteilt von diesem
    • Other Verbesserungen des std-Datentyps: Konstruktion von std::tuple mit geschweiften Klammern, trivial kopierbarer reference_wrapper
    • Sonstiges:

      • C 17-Bibliothek ist basierend auf C11 statt C99
      • Reserviert std[0-9] für zukünftige Standardbibliotheken
      • Hilfsfunktionen wie destroy, uninitialized_move, uninitialized_value_construct und uninitialized_default_construct
      • Spezielle mathematische Funktionen
      • std::clamp()
      • GCD und LCM Berechnungen
      • std::uncaught_Exceptions für das Werfen innerhalb von Destruktoren
      • std::as_const- und std::bool_constant-Typen
      • std::void_t und std::void_t Typen
      • std::owner_less für intelligente Zeiger zum Sortieren nach Inhalt
      • Verbesserungen an std::chrono
      • std::conjunction, std::disjunction, std::negation
      • std::not_fn
      • Regeln für keine Ausnahme innerhalb std
      • std::is_contiguous_layout
      • Hochleistungsfähige Zahlenkonvertierung mit std::to_chars und std::from_chars
  • Eigenschaften:

    • swap, is_aggregate, has_unique_object_representations

Das obige ist der detaillierte Inhalt vonWas sind die wichtigsten neuen Funktionen und Verbesserungen, 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