Was sind die neuen Funktionen in C ++ 17?
C++17 ist nun feature complete, also kaum erleben große Veränderungen. Hunderte von Vorschlägen wurden vorgebracht für C++17.
Welche features wurden Hinzugefügt, um C++ in C++17?
Bei einem C++ - compiler unterstützt C++1z", welche features verfügbar sein, wenn der compiler updates zu C++17?
InformationsquelleAutor der Frage Yakk - Adam Nevraumont | 2016-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sprache-Funktionen:
Vorlagen und Generischen Code -
Template-argument Abzug für Klassen-templates
template <auto>
Non-type template-Argumente behebt
template<template<class...>typename bob> struct foo {}
( Klapp - + ... + - Ausdrücke ) und Revisionen
auto x{8};
einint
Modernisierung
mit
...
und listetLambda
constexpr-lambdas
Erfassen Sie die
*
in lambdas[*this]{ std::cout << could << " be " << useful << '\n'; }
Attribute
[[fallthrough]]
[[nodiscard]]
[[maybe_unused]]
Attribute[[Attribute]]
aufnamespace
undenum { schleuniger, [[s]] }
Attribute zu vermeiden, wiederholen Sie ein Attribut namespace.
Compiler sind jetzt erforderlich, um zu ignorieren, nicht-standard-Attribute, die Sie nicht erkennen.
Syntax-Bereinigung
Inline-Variablen
namespace A::B
Einfach
static_assert(Ausdruck);
mit keine Zeichenfolgekeine
werfen
wennthrow()
undthrow()
istnoexcept(true)
.- Reiniger multi-Rückkehr und flow control
Strukturierte Bindungen
std::tie
mitauto
const auto [it, inserted] = map.insert( {"foo", bar} );
it
undinserted
mit herausgeführt Typ aus derpair
dassmap::insert
gibt.std::array
s und relativ flache Strukturenif (init; Bedingung)
undswitch (init; Bedingung)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
if(decl)
zu Fällen, in denendecl
nicht Cabrio-bool sinnvoll.Verallgemeinern range-basierte for-Schleifen
wenn constexpr
Misc
Hexadezimal float-point-Literale
Dynamische Zuweisung von Speicher für über-Daten ausgerichtet
Garantiert copy-elision
Feste Bestellung-von-Evaluierung für (einige) Ausdrücken mit einigen änderungen
.then
auf die zukünftige Arbeit.Direkte Liste-Initialisierung von enums
Fortschritt garantiert (FPG) (auch, FPGs für parallele algorithmen)
u8 'U', u8 NICHT', u8'F', u8'8'
Zeichen-Literale (string bereits existiert)"noexcept" in das Typ-system
__hat,_include
Arrays von Zeiger-Konvertierung behebt
geerbte Konstruktoren behebt einige Ausnahmefälle (siehe P0136R0 für Beispiele von Verhaltensänderungen)
Aggregat-Initialisierung mit Vererbung.
std::waschen
Typ Zweideutigkeiten, etc- Bibliothek-Neuzugänge:
Datentypen
std::variant<Ts...>
std::optional
std::any
std::string_view
std::string
like-Bezug-zu-Zeichen-array oder substringstring const&
wieder. Auch machen kann, analysieren einer bajillion-mal schneller."Hallo Welt"sv
char_traits
std::byte
mehr ab als Sie kauen konnte.Aufrufen Zeug
std::invoke
std::apply
std::make_from_tuple
std::apply
angewendet zu Objekt-Bauis_invocable
is_invocable_r
invoke_result
result_of
is_invocable<Foo(Args...), R>
"können Sie nennenFoo
mitArgs...
um etwas kompatibel mitR
", woR=void
ist Standard.invoke_result<Foo, Args...>
iststd::result_of_t<Foo(Args...)>
aber offenbar weniger verwirrend?Datei-System TS-v1
[class.Pfad]
[class.Dateisystem.Fehler]
[class.file_status]
[class.directory_entry]
[class.directory_iterator]
und[class.recursive_directory_iterator]
[fs.ops.funcs]
fstream sind
s können geöffnet werden mitpath
s sowieconst path::value_type*
strings.Neue algorithmen
for_each_n
reduce
transform_reduce
exclusive_scan
inclusive_scan
transform_exclusive_scan
transform_inclusive_scan
Hinzugefügt threading Zwecke, ausgesetzt, auch wenn Sie sich nicht mit Ihnen threaded
Threading
std::shared_mutex
atomic<T>
::is_always_lockfree
scoped_lock<Mutexe...>
std::lock
Schmerzen beim sperren von mehr als einem mutex zu einer Zeit.Parallelität TS v1
std
algorithmen und zugehörigen Maschinenhardware_*_interference_size
(Teile von) Bibliothek-Grundlagen-TS-v1 nicht bedeckt, von oben oder unten
[func.searchers]
und[alg.Suche]
[pmr]
std::function
für allocatorsstd::Beispiel
Stichproben aus einer Palette?Container Verbesserungen
try_emplace
undinsert_or_assign
Spleißen für
map<>
unordered_map<>
set<>
undunordered_set<>
non-const
.Daten()
für string.nicht-Mitglied
std::size
std::empty
std::data
std::begin
/end
Minimal unvollständig, geben Unterstützung in Containern
Zusammenhängende iterator-Konzept""
constexpr
der IteratorenDen
emplace
Familie von Funktionen jetzt liefert eine Referenz auf das erzeugte Objekt.Smart Zeiger
unique_ptr<T[]>
behebt und andereunique_ptr
zwickt.weak_from_this
und einige Feste, gemeinsame aus dieserAnderen
std
Datentyp Verbesserungen:{}
den Bau vonstd::tuple
und weitere VerbesserungenMisc
C++17-Bibliothek basiert auf C11 statt C99
Vorbehalten
std[0-9]+
für Zukunft-standard-Bibliothekendestroy(_am|_n)
uninitialized_move(_n)
uninitialized_value_construct(_n)
uninitialized_default_construct(_n)
std
Implementierungen ausgesetztstd::Klammer()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
etwagcd
undlcm
std::uncaught_exceptions
std::as_const
std::bool_constant
_v
template-Variablenstd::void_t<T>
std::owner_less<void>
std::less<void>
aber für die smart-Pointer so Sortieren Sie basierend auf den Inhaltstd::chrono
Polnischstd::Verbindung
std::Disjunktion
std::negation
ausgesetztstd::not_fn
std
std::default_orderUmweg über(bricht ABI von einigen Compilern durch name mangling, zu entfernen).std::less
.Merkmale
Veraltet
<codecvt>
memory_order_consume
result_of
ersetzt mitinvoke_result
shared_ptr::unique
es ist nicht sehr threadsicherIsocpp.org hat hat eine unabhängige Liste der änderungen seit C++14; es wurde teilweise geplündert.
Natürlich TS arbeiten weiterhin parallel, so gibt es einige TS, die sind noch nicht ganz reif, muss warten, bis die nächste iteration. Das Ziel für die nächste iteration ist C++20, wie zuvor geplant, nicht C++19 wie einige Gerüchte angedeutet. C++1O gemieden wurde.
Erste Liste entnommen dieser reddit post und dieser reddit postmit links Hinzugefügt, über googeln oder von oben isocpp.org Seite.
Zusätzliche Einträge geplündert von SD-6 feature-test-Liste.
klammerten sich die feature-Liste und Bibliotheks-feature-Liste werden weiter geplündert. Dies scheint nicht zuverlässig zu sein, wie es ist C++1z, nicht C++17.
diese Folien hatte einige features, die anderswo fehlen.
Während "was entfernt wurde," war nicht gefragt, hier ist eine kurze Liste von ein paar Dinge (die(meist?) Vorherige veraltet) , wurden in C++17 von C++:
Entfernt:
register
Stichwort für die zukünftige Verwendung reserviertbool b; ++b;
<funktionale>
Zeugrandom_shuffle
std::function
Gab es rewordings. Ich bin nicht sicher, wenn diese keine Auswirkungen auf den code, oder, wenn Sie gerade sind Bereinigungen in der standard:
Papiere noch nicht integriert oben:
P0505R0 (constexpr chrono)
P0418R2 (atomic tweaks)
P0512R0 (Vorlage-argument Abzug tweaks)
P0490R0 (strukturierte Bindung tweaks)
P0513R0 (änderungen
std::hash
)P0502R0 (parallel Ausnahmen)
P0509R1 (Aktualisierung der Beschränkungen für das exception handling)
P0012R1 zu machen (Ausnahme-Spezifikationen werden Teil der Art-system)
P0510R0 (Einschränkungen Varianten)
P0504R0 (tags optional/variant/alle)
P0497R0 (shared ptr-tweaks)
P0508R0 (strukturierte Bindungen Anfasser)
P0521R0 (shared pointer verwenden, zählen und einzigartige verpasst?)
Spec-änderungen:
Weitere Referenz:
Papiere sortiert nach Jahr; nicht alle angenommen
https://isocpp.org/files/papers/p0636r0.html
InformationsquelleAutor der Antwort Yakk - Adam Nevraumont