Articles of c ++ 11

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 […]

Ist string :: c_str () in C ++ 11 nicht mehr null-terminiert?

In C ++ 11 ist basic_string::c_str genau gleich wie basic_string::data , das wiederum genau so definiert ist wie *(begin() + n) und *(&*begin() + n) (wenn 0 <= n < size() ). Ich kann nichts finden, bei dem die Zeichenfolge am Ende immer ein Nullzeichen haben muss. Bedeutet dies, dass c_str() nicht mehr garantiert eine […]

Was macht einen gültigen Zustand für ein “bewegt von” -Objekt in C ++ 11 aus?

Ich habe versucht, meinen Kopf darum zu drehen, wie die Bewegungssemantik in C ++ 11 funktionieren soll, und ich habe große Schwierigkeiten damit zu verstehen, welche Bedingungen ein verschobenes Objekt erfüllen muss. Ein Blick auf die Antwort hier triggers meine Frage nicht wirklich, weil ich nicht sehen kann, wie man sie sinnvoll auf Pimpl-Objekte anwendet, […]

std :: thread pass by reference ruft Kopierkonstruktor auf

Nun, ich habe ein Problem mit der Weitergabe von Daten in einen Thread mit std :: thread. Ich dachte, ich verstehe die allgemeine Semantik von Kopierern usw., aber es scheint, dass ich das Problem nicht ganz verstehe. Ich habe eine einfache class namens Log, die ihren Kopierkonstruktor so versteckt hat: class Log { public: Log(const […]

Soll der nachfolgende Rückgabetypsyntaxstil der Standard für neue C ++ 11-Programme werden?

C ++ 11 unterstützt eine neue functionssyntax: auto func_name(int x, int y) -> int; Derzeit würde diese function wie folgt deklariert werden: int func_name(int x, int y); Der neue Stil scheint noch nicht weit verbreitet zu sein (sagen wir in der gcc stl) Sollte dieser neue Stil jedoch überall in neuen C ++ 11-Programmen bevorzugt […]