Articles of c ++ 11

Wie würden Sie Ihre eigene Lese- / Schreibsperre in C ++ 11 implementieren?

Ich habe eine Reihe von Datenstrukturen, die ich mit einem Reader / Writer-Lock schützen muss. Ich kenne boost :: shared_lock, aber ich hätte gerne eine benutzerdefinierte Implementierung mit std :: mutex, std :: condition_variable und / oder std :: atomic, so dass ich besser verstehen kann, wie es funktioniert (und zwinge es später) . Jede […]

Wann sollte ich std :: thread :: detach verwenden?

Irgendwann muss ich std::thread , um meine Anwendung zu beschleunigen. Ich weiß auch, join() wartet, bis ein Thread abgeschlossen ist. Das ist leicht zu verstehen, aber was ist der Unterschied zwischen dem Aufruf von detach() und dem Aufruf nicht? Ich dachte, dass ohne detach() , die Methode des Threads unabhängig von einem Thread funktioniert. Nicht […]

C ++ 11: Ich kann von mehreren Argumenten zu Tupel wechseln, aber kann ich von Tupel zu mehreren Argumenten wechseln?

Mögliche Duplikate: Wie erweitere ich ein Tupel in Argumente der variadischen Template-function? “Entpacken” eines Tupel, um einen passenden functionszeiger aufzurufen Gibt es in C ++ 11-Templates eine Möglichkeit, ein Tupel als einzelne Argumente einer (möglicherweise Template-) function zu verwenden? Beispiel: Sagen wir, ich habe diese function: void foo(int a, int b) { } Und ich […]

C ++ 11 ermöglicht die In-Class-Initialisierung von nicht statischen und nicht konstanten Elementen. Was hat sich geändert?

Vor C ++ 11 konnten wir nur die In-Class-Initialisierung für statische Konst-Member des Integral- oder Enumerationstyps durchführen. Stroustrup bespricht dies in seiner C ++ – FAQ mit dem folgenden Beispiel: class Y { const int c3 = 7; // error: not static static int c4 = 7; // error: not const static const float c5 […]

Warum heißt `std :: move“ `std :: move`?

Die C ++ 11 std::move(x) -function bewegt überhaupt nichts wirklich. Es ist nur eine Besetzung zu r-Wert. Warum wurde das gemacht? Ist das nicht irreführend?

Welche neuen functionen fügen benutzerdefinierte Literale zu C ++ hinzu?

C ++ 11 führt benutzerdefinierte Literale ein , die die Einführung einer neuen literalen Syntax ermöglichen, die auf vorhandenen Literalen ( int , hex , string , float ) basiert, so dass jeder Typ eine literale Präsentation haben kann. Beispiele: // imaginary numbers std::complex operator “” _i(long double d) // cooked form { return std::complex(0, […]

Ist das Schlüsselwort ‘override’ nur eine Überprüfung für eine überschriebene virtuelle Methode?

Soweit ich weiß, ist die Einführung des Schlüsselwortes override in C ++ 11 nichts anderes als eine Überprüfung, um sicherzustellen, dass die implementierte function das override einer virtual function in der Basisklasse ist. Ist es das?

Thread-Pooling in C ++ 11

Relevante Fragen : Über C ++ 11: C ++ 11: Std :: Thread gepoolt? Wird async (launch :: async) in C ++ 11 Thread-Pools überflüssig machen, um teure Threads zu vermeiden? Über Boost: C ++ boost Thread wiederverwendet Threads boost :: thread und erstelle einen Pool von ihnen! Wie erhalte ich einen Pool von Threads, […]

Wie erkennt man C ++ 11 Unterstützung eines Compilers mit CMake

Gibt es eine Möglichkeit, CMake automatisch erkennen zu lassen, wenn ein Compiler C ++ 11 unterstützt oder nicht? Es wäre schön, die Benutzer während des Cmake-Laufs darüber zu informieren, dass der Code nicht kompiliert wird, da der Compiler C ++ 11 nicht unterstützt. Im Moment habe ich die C ++ 11 Flags gesetzt. Wenn ein […]

Wie unterscheidet sich “= default” von “{}” für Standardkonstruktor und Destruktor?

Ich habe dies ursprünglich nur als Frage über Destruktoren geschrieben, aber jetzt füge ich Überlegungen zum Standardkonstruktor hinzu. Hier ist die ursprüngliche Frage: Wenn ich meiner class einen Destruktor geben möchte, der virtuell ist, aber ansonsten dasselbe ist, was der Compiler erzeugen würde, kann ich =default : class Widget { public: virtual ~Widget() = default; […]