Articles of c ++ 11

Wie überprüft man, ob ein std :: -Thread noch läuft?

Wie kann ich überprüfen, ob ein std::thread (plattformunabhängig) noch läuft? Es fehlt eine timed_join() Methode und joinable() ist dafür nicht gedacht. Ich dachte daran, einen Mutex mit einem std::lock_guard in den Thread zu std::lock_guard und mithilfe der try_lock() -Methode des Mutex festzustellen, ob er noch gesperrt ist (der Thread läuft), aber es erscheint mir unnötig […]

Warum hat C ++ keinen Garbage Collector?

Ich stelle diese Frage nicht wegen der Vorteile der Garbage-Collection vor allem. Mein Hauptgrund dafür ist, dass ich weiß, dass Bjarne Stroustrup gesagt hat, dass C ++ irgendwann einen Müllsammler haben wird. Mit dem gesagt, warum wurde es nicht hinzugefügt? Es gibt bereits einige Garbage Collectors für C ++. Ist das nur eines von diesen […]

Unterschied zwischen spitzen Klammern und doppelten Anführungszeichen “”, wenn Headerdateien in C ++ eingeschlossen sind?

Mögliche Duplikate: Was ist der Unterschied zwischen #include und #include “filename”? Was ist der Unterschied zwischen der spitzen Klammer und doppelten Anführungszeichen ” ” wenn Header-Dateien in C ++ eingeschlossen sind? Ich meine, welche Dateien sollen mit einbezogen werden zB: #include und welche Dateien sollen mit einbezogen werden zB: #include “MyFile.h” ???

Wie verwende ich die range-basierte for () Schleife mit std :: map?

Das gängige Beispiel für C ++ 11-basierte for () -Schleifen ist immer etwas Einfaches: std::vector numbers = { 1, 2, 3, 4, 5, 6, 7 }; for ( auto xyz : numbers ) { std::cout << xyz << std::endl; } In diesem Fall ist xyz ein int . Aber was passiert, wenn wir so etwas […]

C ++ 11 Reverse-Range-basierte For-Schleife

Gibt es einen Container-Adapter, der die Richtung der Iteratoren umkehren würde, so dass ich mit einer bereichsbasierten For-Schleife rückwärts über einen Container iterieren kann? Mit expliziten Iteratoren würde ich das konvertieren: for (auto i = c.begin(); i != c.end(); ++i) { … das mögen: for (auto i = c.rbegin(); i != c.rend(); ++i) { … […]

Generieren Sie zufällige Zahlen mit zufälliger C ++ 11-Bibliothek

Wie der Titel andeutet, versuche ich herauszufinden, wie man mit der neuen C ++ 11 -Bibliothek . Ich habe es mit diesem Code versucht: std::default_random_engine generator; std::uniform_real_distribution uniform_distance(1, 10.001); Das Problem mit dem Code, den ich habe, ist, dass jedes Mal, wenn ich es kompiliere und ausführe, es immer die gleichen Zahlen erzeugt. Also meine […]

Warum können lambdas vom Compiler besser optimiert werden als einfache functionen?

In seinem Buch The C++ Standard Library (Second Edition) Nicolai Josuttis fest, dass Lambdas vom Compiler besser optimiert werden können als einfache functionen. Außerdem optimieren C ++ – Compiler Lambdas besser als normale functionen. (Seite 213) Warum das? Ich dachte, wenn es um Inlining geht, sollte es keinen Unterschied mehr geben. Der einzige Grund, an […]

Warum ist std :: function nicht gleichwertig?

Diese Frage gilt auch für boost::function und std::tr1::function . std::function ist keine Gleichheit vergleichbar: #include void foo() { } int main() { std::function f(foo), g(foo); bool are_equal(f == g); // Error: f and g are not equality comparable } In C ++ 11 existieren der operator== und der operator!= Überladungen einfach nicht. In einem frühen […]

Ist dieses Verhalten von vector :: resize (size_type n) unter C ++ 11 und Boost.Container korrekt?

Ich habe eine C ++ 03 Anwendung, wo std::vector -Typen überall als temporäre Puffer verwendet werden. Daher werden sie oft mit std::vector::resize() um sicherzustellen, dass sie groß genug sind, um die benötigten Daten vor der Verwendung zu speichern. Der C ++ 03-Prototyp für diese function ist eigentlich: void resize(size_type n, value_type val = value_type()); In […]

Warum wird der Destruktor einer Zukunft von `std :: async` blockiert?

Beim Versuch, eine andere Stackoverflow-Frage zu beantworten, erkannte ich, dass dieses einfache C ++ 11-Snippet den aufrufenden Thread implizit blockiert: std::async(std::launch::async, run_async_task) Für mich wäre das der kanonische C ++ 11 Weg gewesen, eine Aufgabe asynchron zu starten, ohne sich um das Ergebnis zu kümmern. Stattdessen muss man explizit einen Thread erstellen und lösen (siehe […]