Articles of c ++ 11

Klammern eingeschlossener Initialisiererlistenkonstruktor

Ich habe class Phänotyp mit folgendem Konstruktor: Phenotype(uint8 init[NUM_ITEMS]); Ich kann einen Phänotyp wie folgt erstellen: uint8 data[] = {0,0,0,0,0}; Phenotype p(data); Aber ich bekomme einen Fehler, wenn ich versuche, einen wie folgt zu erstellen: Phenotype p = {0,0,0,0,0}; Ausgabe: $ make g++ -Wall -g main.cpp -std=c++0x main.cpp: In function ‘int main(int, char**)’: main.cpp:109: error: […]

Überprüfen Sie die Eigenschaften für alle variablen Vorlagenargumente

Hintergrund: Ich habe die folgende class C , deren Konstruktor N Variablen des Typs B& : class A; class B { A* getA(); }; template class C { public: template inline C(Args&… args) : member{args.getA()…} {} private: std::array member; }; Problem: Mein Problem ist, wie man die variadischen Args so Args , dass sie alle […]

Statische Datenelementinitialisierung

Warum muss die Initialisierung statischer Datenelemente außerhalb der class erfolgen? class X { public: int normalValue = 5; //NSDMI static int i; }; int X::i = 0; Warum ist das statische Datenelement (hier “i”) nur eine Deklaration, keine Definition?

Wie man stark typisierte enum in int automatisch umwandelt?

#include struct a { enum LOCAL_A { A1, A2 }; }; enum class b { B1, B2 }; int foo( int input ) { return input; } int main(void) { std::cout<<foo(a::A1)<<std::endl; std::cout<<foo(static_cast(b::B2))<<std::endl; } Das a::LOCAL_A ist das, was die stark typisierte a::LOCAL_A erreichen will, aber es gibt einen kleinen Unterschied: normale Enums können in Integer-Typen […]

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