Von http://en.cppreference.com/w/cpp/string/byte/memcpy : Wenn die Objekte nicht TriviallyCopyable sind (z. B. Skalare, Arrays, C-kompatible Strukturen), ist das Verhalten undefiniert. Bei meiner Arbeit haben wir std::memcpylange Zeit Objekte, die nicht TriviallyCopyable sind, bitweise ausgetauscht, indem wir : void swapMemory(Entity* ePtr1, Entity* ePtr2) { static const int size = sizeof(Entity); char swapBuffer[size]; …
Nach dem, was ich von Herb Sutter und anderen gelesen habe, würde man denken, dass die volatilegleichzeitige Programmierung völlig orthogonale Konzepte waren, zumindest was C / C ++ betrifft. In der GCC- Implementierung haben jedoch alle std::atomicMitgliedsfunktionen das volatileQualifikationsmerkmal. Gleiches gilt für Anthony Williams ' Implementierung von std::atomic. Also, was …
In C ++ 11 basic_string::c_strist genau das gleiche definiert wie basic_string::data, was wiederum genau das gleiche ist wie *(begin() + n)und *(&*begin() + n)(wann 0 <= n < size()). Ich kann nichts finden, bei dem die Zeichenfolge immer ein Nullzeichen am Ende haben muss. Bedeutet dies, dass c_str()nicht mehr garantiert …
Ich habe mit variablen C ++ 0x-Vorlagen experimentiert, als ich auf dieses Problem gestoßen bin: template < typename ...Args > struct identities { typedef Args type; //compile error: "parameter packs not expanded with '...' }; //The following code just shows an example of potential use, but has no relation //with …
Ich verwende eine externe Bibliothek, die mir irgendwann einen unformatierten Zeiger auf ein Array von Ganzzahlen und eine Größe gibt. Jetzt möchte ich auf std::vectordiese Werte zugreifen und sie ändern, anstatt mit rohen Zeigern darauf zuzugreifen. Hier ist ein künstliches Beispiel, das den Punkt erklärt: size_t size = 0; int …
Jetzt, da C ++ 11 Multithreading hat, habe ich mich gefragt, wie man faul initialisierte Singleton ohne Verwendung von Mutexen (aus Perf-Gründen) richtig implementiert. Ich habe mir das ausgedacht, aber ich bin nicht wirklich gut darin, sperrfreien Code zu schreiben, also suche ich nach besseren Lösungen. // ConsoleApplication1.cpp : Defines …
Aus dem GCC 4.8-Änderungsprotokollentwurf : G ++ implementiert jetzt das Schlüsselwort C ++ 11 thread_local ; Dies unterscheidet sich vom GNU- __threadSchlüsselwort hauptsächlich dadurch, dass es eine dynamische Initialisierungs- und Zerstörungssemantik ermöglicht. Leider erfordert diese Unterstützung eine Laufzeitstrafe für Verweise auf nicht funktionslokale thread_localVariablen, auch wenn sie keine dynamische Initialisierung …
Wenn eine Datenstruktur mehrere Elemente enthält, kann die atomare Version nicht (immer) sperrfrei sein. Mir wurde gesagt, dass dies für größere Typen gilt, da die CPU die Daten nicht atomar ändern kann, ohne eine Art Sperre zu verwenden. zum Beispiel: #include <iostream> #include <atomic> struct foo { double a; double …
In fast jedem Beitrag, den ich auf SO sehe und an dem a beteiligt ist std::initializer_list, neigen die Leute dazu, einen std::initializer_listWert zu übergeben. Nach diesem Artikel: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ man sollte den Wert übergeben, wenn man eine Kopie des übergebenen Objekts erstellen möchte. Aber das Kopieren von a std::initializer_listist keine gute …
Diese Frage passt derzeit nicht zu unserem Q & A-Format. Wir erwarten, dass die Antworten durch Fakten, Referenzen oder Fachwissen gestützt werden, aber diese Frage wird wahrscheinlich zu Debatten, Argumenten, Umfragen oder erweiterten Diskussionen führen. Wenn Sie der Meinung sind, dass diese Frage verbessert und möglicherweise erneut geöffnet werden kann, …
Ich benutze den folgenden Code, um die C ++ - <random>Bibliothek zu testen . Warum erhalte ich für jeden Lauf der kompilierten ausführbaren Datei genau die gleiche Reihenfolge? Ist rd()bei der Zusammenstellung deterministisch? Wie erhalte ich für jeden Lauf eine andere Ausgabe? GCC 4.8.1 unter Windows 7 64bit. Verwenden der …
Angesichts des neuen Toolset, das von vielen Programmierern in C ++ bereitgestellt wird, zielen viele auf Programmvereinfachung, Ausdruckskraft und Effizienz ab, überfliegen ihren alten Code und nehmen Optimierungen (einige sinnlos, andere erfolgreich) vor, um ihre Ziele zu erreichen. Was sind die besten Praktiken, wenn Sie versuchen, nicht zu viel Zeit …
(Ich habe bereits gelesen, wie lange implizite Funktoren aus Lambda in C ++ noch leben, und diese Frage wird nicht beantwortet.) Ich verstehe, dass die C ++ - Lambda-Syntax nur Zucker ist, um eine Instanz einer anonymen Klasse mit einem Aufrufoperator und einem bestimmten Status zu erstellen, und ich verstehe …
Wenn ich einen Iterator in einen Vektor habe a, dann bewege ich einen Vektor baus oder bewege ihn zu. Zeigt adieser Iterator immer noch auf dasselbe Element (jetzt im Vektor b)? Folgendes meine ich im Code: #include <vector> #include <iostream> int main(int argc, char *argv[]) { std::vector<int>::iterator a_iter; std::vector<int> b; …
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.