Articles of c ++ 11

initializer_list und Vorlagentyp Abzug

Betrachten Sie die function: template void printme(T&& t) { for (auto i : t) std::cout << i; } oder jede andere function, die einen Parameter mit einem begin () / end () – aktivierten Typ erwartet. Warum ist das Folgende illegal? printme({‘a’, ‘b’, ‘c’}); Wenn all dies legitim ist: printme(std::vector({‘a’, ‘b’, ‘c’})); printme(std::string(“abc”)); printme(std::array {‘a’, […]

Warum ist C ++ 11s POD “Standardlayout” Definition so wie es ist?

Ich untersuche die neue, entspannte POD-Definition in C ++ 11 (Abschnitt 9.7). Eine Standardlayout-class ist eine class, die hat keine nicht statischen Datenelemente vom Typ Nicht-Standard-Layout-class (oder Array von solchen Typen) oder Referenz, hat keine virtuellen functionen (10.3) und keine virtuellen Basisklassen (10.1), hat die gleiche Zugriffskontrolle (Klausel 11) für alle nicht statischen Datenmitglieder, hat […]

Der einfachste und sauberste c ++ 11 ScopeGuard

Ich versuche, einen einfachen ScopeGuard basierend auf Alexandrescu-Konzepten, aber mit C ++ 11-Idiomen zu schreiben. namespace RAII { template class ScopeGuard { mutable bool committed; Lambda rollbackLambda; public: ScopeGuard( const Lambda& _l) : committed(false) , rollbackLambda(_l) {} template ScopeGuard( const AdquireLambda& _al , const Lambda& _l) : committed(false) , rollbackLambda(_l) { _al(); } ~ScopeGuard() { […]

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