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.
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 …
Ich versuche herauszufinden, wie man die Adresse einer Lambda-Funktion in sich selbst erhält. Hier ist ein Beispielcode: []() { std::cout << "Address of this lambda function is => " << ???? }(); Ich weiß, dass ich das Lambda in einer Variablen erfassen und die Adresse drucken kann, aber ich möchte …
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, …
Gibt es eine Möglichkeit zu überprüfen, ob zwei Funktionen dieselbe Signatur haben? Zum Beispiel: int funA (int a, int b); int funB (int a, int b); float funC (int a, int b); int funD (float a, int b); In diesem Beispiel ist funAund funBdie einzige Kombination von Funktionen, die zurückgegeben …
Wie deklarieren und initialisieren Sie in C ++ 17 einen Vektor von Paaren (oder Tupeln) mit einem optionalen Element? std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true}, {2, false}, {3, nullptr}}; Ich habe ein Paar, bei dem das zweite Element null / optional sein kann.
Dieser Code wird nicht in Clang (6,7,8,9, Trunk) kompiliert, sondern in GCC (7.1, 8.1, 9.1) einwandfrei kompiliert: template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } else …
Betrachten Sie den folgenden Code . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } Hier wird der zweite Konvertierungsoperator durch die Überlastauflösung ausgewählt. Warum? Soweit ich es verstehe, sind die beiden Betreiber …
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, …
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 …
#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 …
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 …
Ich habe eine überladene Vorlagenfunktion: template<typename T1, typename T2> auto overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a ? a : b; } template<typename RT, typename T1, typename T2> RT overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a …
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, …
Ich arbeite in einem Projekt mit C ++ 11 und habe versucht, folgenden Code zu verwenden #include <atomic> struct A { std::atomic_int idx = 1; }; int main() { return 0; } Ich bekomme den Compilerfehler error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]' std::atomic_int idx = …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.