Als «c++17» getaggte Fragen

C ++ 17 ist der Name des 2017 genehmigten C ++ - Standards. Er baut auf dem vorherigen C ++ 14-Standard auf, verbessert die Kernsprache und die Standardbibliothek und fügt einige neue Sprachfunktionen hinzu.

2
Vorbereitung für veraltete std :: iterator
Am 21. März st stimmte der Normenausschuss der deprecation von genehmigen std::iteratorvorgeschlagen in P0174 : Die lange Folge von ungültigen Argumenten ist für den Leser viel weniger klar als die bloße typedefAngabe der erwarteten s in der Klassendefinition selbst. Dies ist der Ansatz des aktuellen Arbeitsentwurfs nach dem festgelegten Musterc …



2
Warum funktioniert remove_reference nicht für Funktionen?
Ich bin neulich auf etwas Seltsames gestoßen, als ich eine Vorlagen-Metaprogrammierung durchgeführt habe. Es kommt im Grunde darauf an, dass diese Behauptung nicht (wie ich erwarten würde) vorübergeht. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Zuerst dachte ich, ich hätte einen syntaktischen Fehler beim Definieren einer Funktionsreferenz gemacht, aber diese Behauptung ist erfolgreich und zeigt, …
38 c++  templates  types  c++17 





3
Wie kann ich ein kartesisches Produkt von Typlisten in C ++ erstellen?
Selbsterklärend. Angenommen, ich habe Typlisten wie folgt: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Sie können eine variable Anzahl von Typlisten sein. Wie erhalte ich eine Typeliste für kartesische Produkte? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, …

3
Wird der Deleter eines shared_ptr im vom benutzerdefinierten Allokator zugewiesenen Speicher gespeichert?
Angenommen, ich habe eine shared_ptrmit einem benutzerdefinierten Allokator und einem benutzerdefinierten Löscher. Ich kann im Standard nichts finden, das darüber spricht, wo der Deleter gespeichert werden soll: Es heißt nicht, dass der benutzerdefinierte Allokator für den Speicher des Deleters verwendet wird, und es heißt nicht, dass dies nicht der Fall …

4
Implizite Konvertierung bei Rückgabe nicht zulässig
#include <optional> bool f() { std::optional<int> opt; return opt; } Kompiliert nicht: 'return': cannot convert from 'std::optional<int>' to 'bool' Beratungsreferenz Ich hätte gedacht, eine Erklärung zu finden, aber ich habe sie gelesen, da es in Ordnung sein sollte. Implizite Konvertierungen werden immer dann durchgeführt, wenn ein Ausdruck eines Typs T1 …

3
Teilen Sie einen bestimmten std :: varianten-Typ nach einem bestimmten Kriterium
Wie durch einen bestimmten Variantentyp using V = std::variant<bool, char, std::string, int, float, double, std::vector<int>>; deklarieren Sie zwei Variantentypen using V1 = std::variant<bool, char, int, float, double>; using V2 = std::variant<std::string, std::vector<int>>; Woher V1gehören alle arithmetischen Typen von Vund V2alle nicht-arithmetischen Typen von V? V kann ein Parameter einer Vorlagenklasse …
20 c++  c++17  std-variant 


4
Ist es gültig, std :: transform mit std :: back_inserter zu verwenden?
Cppreference hat diesen Beispielcode für std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Es heißt aber auch: std::transformgarantiert nicht die ordnungsgemäße Anwendung von unary_opoder binary_op. Verwenden Sie zum Anwenden einer Funktion auf eine Sequenz in der angegebenen Reihenfolge oder zum Anwenden einer Funktion, …


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.