Articles of c ++ 11

Unterschiede zwischen std :: make_unique und std :: unique_ptr

Hat std::make_unique irgendwelche Effizienzvorteile wie std::makes_shared ? Im Vergleich zur manuellen Erstellung von std::unique_ptr : std::make_unique(1); // vs std::unique_ptr(new int(1));

Warum ist die Vorlageargumentableitung mit std :: forward deaktiviert?

In VS2010 ist std :: forward wie folgt definiert: template inline _Ty&& forward(typename identity::type& _Arg) { // forward _Arg, given explicitly specified type parameter return ((_Ty&&)_Arg); } identity scheint nur zum Deaktivieren der Vorlagenargumentableitung verwendet zu werden. Was ist der Zweck, es in diesem Fall gezielt zu deaktivieren?

Generischer Hash für Tupel in unordered_map / unordered_set

Warum funktioniert std::unordered_map<tuple, string> nicht ohne std::unordered_map<tuple, string> ? Es ist mühsam, eine Hash-function für das tuple , z template struct do_hash<tuple> { size_t operator()(std::tuple const& tt) const {…} }; Erstellen einer ungeordneten Map mit Tupeln als Schlüssel (Matthieu M.) zeigt, wie man dies für boost::tuple automatisiert. Gibt es das überhaupt für c ++ 0x-Tupel, […]

Unterschied zwischen pointers und Referenz als Thread-Parameter

Dies ist das Beispiel: #include #include using namespace std; void f1(double& ret) { ret=5.; } void f2(double* ret) { *ret=5.; } int main() { double ret=0.; thread t1(f1, ret); t1.join(); cout << "ret=" << ret << endl; thread t2(f2, &ret); t2.join(); cout << "ret=" << ret << endl; } Und die Ausgabe ist: ret=0 ret=5 […]

Ist is_constexpr in C ++ 11 möglich?

Ist es möglich, einen booleschen Kompilierungszeitwert zu erzeugen, der darauf basiert, ob ein C ++ 11-Ausdruck ein konstanter Ausdruck (dh constexpr ) in C ++ 11 ist oder nicht? Ein paar Fragen zu SO beziehen sich darauf, aber ich sehe nirgendwo eine klare Antwort.

Initialisieren eines Elementarrays im Konstruktorinitialisierer

class C { public: C() : arr({1,2,3}) //doesn’t compile {} /* C() : arr{1,2,3} //doesn’t compile either {} */ private: int arr[3]; }; Ich glaube der Grund ist, dass Arrays nur mit = Syntax initialisiert werden können, nämlich: int arr[3] = {1,3,4}; Fragen Wie kann ich tun, was ich tun möchte (das heißt, ein Array […]

Kann ich C ++ 11 mit Xcode verwenden?

Ich denke über die Verwendung einiger C ++ 11 Features (wie zB auto ) in einigen plattformübergreifenden Projekten (Windows + Mac) nach. Unter Windows unterstützt Visual Studio Teile des kommenden C ++ 11-Standards, mit denen ich Teile der Codebasis vereinfachen kann, so dass ich natürlich daran interessiert wäre, diese functionen zu verwenden. Aber soweit ich […]

Wie ruft man eine function für alle variadischen Vorlagenargumente auf?

ich möchte zu tun template void print(ArgTypes… Args) { print(Args)…; } Und muss es dieser ziemlich sperrigen rekursiven Kette entsprechen: template void print(const T& t, ArgTypes… Args) { print(t); print(Args…); } gefolgt von expliziten Ein-Parameter-Spezialisierungen für jeden Typ, den ich drucken möchte. Das “Problem” bei der rekursiven Implementierung besteht darin, dass viel redundanter Code erzeugt […]

Wie kann ich C ++ 11 in Qt Creator aktivieren?

Der Titel ist ziemlich selbstbeschreibend. Ich habe Qt Creator 2.7.0 heruntergeladen, und ich versuche, einige grundlegende C ++ 11 Code zu kompilieren: int my_array[5] = {1, 2, 3, 4, 5}; for(int &x : my_array) { x *= 2; } Ich erhalte den folgenden Fehler: range based for loops are not allowed in c++ 98 mode […]

Wie überprüft man, ob ein std :: -Thread noch läuft?

Wie kann ich überprüfen, ob ein std::thread (plattformunabhängig) noch läuft? Es fehlt eine timed_join() Methode und joinable() ist dafür nicht gedacht. Ich dachte daran, einen Mutex mit einem std::lock_guard in den Thread zu std::lock_guard und mithilfe der try_lock() -Methode des Mutex festzustellen, ob er noch gesperrt ist (der Thread läuft), aber es erscheint mir unnötig […]