In C ++ 20 std::swapwird eine constexprFunktion. Ich weiß, dass die Standardbibliothek beim Markieren von Dingen wirklich hinter der Sprache zurückgeblieben ist constexpr, aber bis 2017 <algorithm>war sie ziemlich genau wie eine Reihe anderer Dinge. Noch std::swapnicht. Ich erinnere mich vage an einen seltsamen Sprachfehler, der diese Markierung verhindert, aber …
Angenommen, ich habe einen Vektor von ganzen Zahlen: std::vector<int> indices; for (int i=0; i<15; i++) indices.push_back(i); Dann sortiere ich es in absteigender Reihenfolge: sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];}) for (int i=0; i<15; i++) printf("%i\n", indices[i]); Dies ergibt Folgendes: 14 13 12 11 10 9 …
Ich bemerkte , dass aggregierte Liste initialisiert von std :: vector führt Initialisierung kopieren , wenn Bewegung mehr anwendbar ist. Gleichzeitig machen mehrere emplace_backs, was ich will. Ich konnte mir nur diese unvollständige Lösung für das Schreiben einer Vorlagenfunktion einfallen lassen init_emplace_vector. Es ist jedoch nur für nicht explizite Einzelwertkonstruktoren …
Beim Lesen des C ++ Primer-Buches stieß ich auf die folgende Aussage: "Die Anzahl der Elemente in einem Array ist Teil des Array-Typs." Also wollte ich das mit folgendem Code herausfinden: #include<iostream> int main() { char Array1[]{'H', 'e', 'l', 'p'}; char Array2[]{'P', 'l', 'e', 'a', 's', 'e'}; std::cout<<typeid(Array1).name()<<std::endl; //prints A4_c …
Ich habe eine Funktionsvorlage, die viele verschiedene Typen als Eingabe verwendet. Von diesen Typen hat nur einer eine getInt()Funktion. Daher möchte ich, dass der Code die Funktion nur für diesen Typ ausführt. Bitte schlagen Sie eine Lösung vor. Vielen Dank #include <type_traits> #include <typeinfo> class X { public: int getInt(){ …
In der Dokumentation von std::memory_ordercppreference.com finden Sie ein Beispiel für eine entspannte Bestellung: Entspannte Bestellung Mit Tags versehene atomare Operationen memory_order_relaxedsind keine Synchronisationsoperationen. Sie legen keine Reihenfolge bei gleichzeitigen Speicherzugriffen fest. Sie garantieren nur die Konsistenz der Atomizität und der Änderungsreihenfolge. Zum Beispiel, wenn x und y anfänglich Null sind, …
Der folgende Code wird mit gcc und clang (und vielen anderen C ++ 11-Compilern) kompiliert. #include <stdint.h> typedef int datatype; template <typename T> struct to_datatype {}; template <> struct to_datatype<int16_t> { static constexpr datatype value = 1; }; template <typename T> class data { public: data(datatype dt = to_datatype<T>::value) {} …
Ich versuche, Ausdruckstypen von C ++ zu verstehen, und je mehr ich lese, desto verwirrter war ich, da ich den C ++ - Entwurf sehr schwer zu verdauen finde und daher andere Ressourcen bevorzuge, aber sie widersprechen sich entweder oder berücksichtigen nicht, dass die Wortlaut und Definition zwischen C ++ …
Ich bin auf folgende Aussagen gestoßen: resize(n)- Ändert die Größe des Containers so, dass er 'n' Elemente enthält. shrink_to_fit()- Reduziert die Kapazität des Containers auf seine Größe und zerstört alle Elemente, die über die Kapazität hinausgehen. Gibt es einen signifikanten Unterschied zwischen diesen Funktionen? Sie kommen in c ++ unter …
Ich kenne vom Compiler generierte Funktionen, die Dreierregel und die Fünferregel. In realen Szenarien ist es möglicherweise nicht trivial, genau herauszufinden, welche der vom Compiler generierten Funktionen (Konstruktoren, Zuweisungsoperatoren, Destruktoren) tatsächlich vom Compiler erstellt wurden. Gibt es eine Möglichkeit, die vom Compiler generierten Funktionen für eine bestimmte Klasse aufzulisten? Ich …
Irgendeine Idee, warum das folgende Snippet nicht kompiliert wird? Es beschwert sich mit einem Fehler "Fehler: Operanden zu ?: Haben verschiedene Typen" auto lambda1 = [&](T& arg) { ... }; auto lambda2 = [&](T& arg) { ... }; auto lambda = condition ? lambda1 : lambda2;
Ist das folgende (erfundenes Beispiel) in Ordnung oder ist es undefiniertes Verhalten: // undefined behavior? const auto& c = SomeClass{}; // use c in code later const auto& v = c.GetSomeVariable();
Eine überladene Funktion sollte beide Funktoren aufnehmen, da der Lambda-Typ entscheidbar ist (umsetzbar auf einen std::function(bitte korrigieren Sie mich, wenn ich falsch liege). Die Frage ist: Warum gibt es unten einen Kompilierungsfehler, obwohl der Lambda-Typ explizit ist definiert? ( [&]() -> Type {}) Bitte beachten Sie, dass ich für meine …
Ich habe Code, der Übereinstimmungen eines Musters findet und ausdruckt, indem er über den Container mit Zeichenfolgen geht. Der Druck wird in der Funktion ausgeführt foo , die als Templat wird Der Code #include <iostream> #include <algorithm> #include <iterator> #include <vector> #include <string> #include <tuple> #include <utility> template<typename Iterator, template<typename> …
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.