Articles of c ++ 11

Wie hoch ist der Overhead von Smartpointern im Vergleich zu normalen pointersn in C ++?

Wie hoch ist der Overhead von Smartpointern im Vergleich zu normalen pointersn in C ++ 11? Mit anderen Worten, wird mein Code langsamer, wenn ich intelligente pointers verwende, und wenn ja, wie viel langsamer? Insbesondere frage ich nach C ++ 11 std::shared_ptr und std::unique_ptr . Offensichtlich wird das Zeug, das den Stapel hinuntergedrückt wird, größer […]

C ++ 11 entspricht Boost shared_mutex

Gibt es eine C ++ 11-Entsprechung für boost::shared_mutex Oder eine andere Lösung, um eine Situation mit mehreren Lesern / einzelnen Schreibern in C ++ 11 zu bewältigen?

Lassen rValue-Referenzen freie Referenzen zu?

Betrachten Sie das Folgende. #include using std::string; string middle_name () { return “Jaan”; } int main () { string&& danger = middle_name(); // ?! return 0; } Dies berechnet nichts, aber es kompiliert ohne Fehler und demonstriert etwas, das ich verwirrend finde: danger ist eine freie Referenz, nicht wahr?

C ++ 11: Kompilierzeitberechnung von Array

Angenommen, ich habe eine consExpr-function f: constexpr int f(int x) { … } Und ich habe einige const int N zur Kompilierzeit bekannt: Entweder #define N …; oder const int N = …; wie von Ihrer Antwort benötigt. Ich möchte ein int-Array X haben: int X[N] = { f(0), f(1), f(2), …, f(N-1) } so […]

Nun, da wir std :: array haben, was bleibt für C-artige Arrays übrig?

std::array ist den C-Arrays weit überlegen. Und selbst wenn ich mit altem Code interoperieren möchte, kann ich einfach std::array::data() . Gibt es einen Grund, warum ich jemals ein Old-School-Array haben möchte?

std :: fstream buffering vs manuelle Pufferung (warum 10x Gewinn mit manueller Pufferung)?

Ich habe zwei Schreibkonfigurationen getestet: 1) Fstream-Pufferung: // Initialization const unsigned int length = 8192; char buffer[length]; std::ofstream stream; stream.rdbuf()->pubsetbuf(buffer, length); stream.open(“test.dat”, std::ios::binary | std::ios::trunc) // To write I use : stream.write(reinterpret_cast(&x), sizeof(x)); 2) Manuelle Pufferung: // Initialization const unsigned int length = 8192; char buffer[length]; std::ofstream stream(“test.dat”, std::ios::binary | std::ios::trunc); // Then I put […]

Was ist der Sinn von Noreturn?

[dcl.attr.noreturn] liefert folgendes Beispiel: [[ noreturn ]] void f() { throw “error”; // OK } aber ich verstehe nicht, was der Punkt von [[noreturn]] , weil der Rückgabetyp der function bereits void . Also, was ist der Sinn des noreturn Attributs? Wie soll es verwendet werden?

Kopiere Konstruktor für eine class mit unique_ptr

Wie implementiere ich einen Kopierkonstruktor für eine class mit einer Membervariablen unique_ptr ? Ich denke nur an C ++ 11.

Warum verwenden manche Leute Swap für Verschiebungsaufträge?

Zum Beispiel hat stdlibc ++ Folgendes: unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*this); __u._M_device = 0; __u._M_owns = false; return *this; } Warum ordnen Sie die beiden __u-Mitglieder nicht einfach direkt diesem * zu? Bedeutet der Tausch nicht, dass __u die * dieser Mitglieder zugewiesen wird, nur um später dann 0 und falsch zugewiesen zu […]

Auflösen mehrdeutiger Überladung auf functionszeiger und std :: function für ein Lambda mit +

Im folgenden Code ist der erste Aufruf von foo mehrdeutig und kann daher nicht kompiliert werden. Die zweite, mit dem + vor dem Lambda, wird in den Überlauf des functionszeigers aufgetriggers. #include void foo(std::function f) { f(); } void foo(void (*f)()) { f(); } int main () { foo( [](){} ); // ambiguous foo( +[](){} […]