Articles of c ++ 11

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

Wie zeichne ich ein unique_ptr in einen Lambda-Ausdruck ein?

Ich habe Folgendes versucht: std::function getAction(std::unique_ptr &&psomething){ //The caller given ownership of psomething return [psomething](){ psomething->do_some_thing(); //psomething is expected to be released after this point }; } Aber es kompiliert nicht. Irgendwelche Ideen? AKTUALISIEREN: Wie bereits erwähnt, ist eine neue Syntax erforderlich, um explizit anzugeben, dass wir das Eigentumsrecht auf das Lambda übertragen müssen. Ich […]