Articles of c ++ 11

Kann ich einen autonomen `self’-Membertyp in C ++ implementieren?

C ++ fehlt das Äquivalent von PHPs self Schlüsselwort , das den Typ der einschließenden class auswertet. Es ist einfach genug, um es pro class zu fälschen: struct Foo { typedef Foo self; }; aber ich musste Foo nochmal schreiben. Vielleicht werde ich das eines Tages falsch verstehen und einen stillen Fehler verursachen. Kann ich […]

Wie viel ist zu viel mit C ++ 11 Auto Keyword?

Ich habe das neue auto Schlüsselwort verwendet, das im C ++ 11-Standard für komplizierte Template-Typen verfügbar ist, wofür ich glaube, dass es dafür entwickelt wurde. Aber ich benutze es auch für Dinge wie: auto foo = std::make_shared(); Und skeptischer für: auto foo = bla(); // where bla() return a shared_ptr Ich habe nicht viel Diskussion […]

Wie beende ich einen Thread in C ++ 11?

Ich muss den Thread nicht korrekt beenden oder auf einen Befehl “Beenden” reagieren lassen. Ich bin daran interessiert, den Thread mit reinem C ++ 11 zu beenden.

Was ist std :: move () und wann sollte es verwendet werden?

Was ist es? Was tut es? Wann sollte es verwendet werden? Gute Links werden geschätzt.

Unterstützt C ++ Variable Length Arrays?

Nein, warte, ertrage mich … VLAs waren immer eine GCC-Erweiterung, aber sie wurden von C99 übernommen: [C99: 6.7.5.2/4]: Wenn die Größe nicht vorhanden ist, ist der Array-Typ ein unvollständiger Typ. Wenn die Größe * ist, anstatt ein Ausdruck zu sein, ist der Array-Typ ein Array-Typ variabler Länge mit nicht spezifizierter Größe, der nur in Deklarationen […]

Wie kann ich eine Karte entfernen, während ich sie wiederhole?

Wie entferne ich eine Karte, während ich sie wiederhole? mögen: std::map map; for(auto i : map) if(needs_removing(i)) // remove it from the map Wenn ich map.erase , werden die Iteratoren ungültig

Wie aktiviert man C ++ 11 in CMake?

Wenn ich versuche, CMake generierte Makefile zu laufen, um mein Programm zu kompilieren, bekomme ich den Fehler, dass bereichsbasierte for-Schleifen werden im C ++ 98-Modus nicht unterstützt. Ich habe versucht, add_definitions(-std=c++0x) zu meiner CMakeLists.txt , aber es hat nicht geholfen. Ich habe das auch versucht: if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-std=gnu++0x) endif() Wenn ich g++ –version mache, bekomme ich: […]

Kompilieren von C ++ 11 mit g ++

Ich versuche, meinen C ++ – Compiler auf C ++ 11 zu aktualisieren. Ich habe ein wenig gesucht und bin zu dem Schluss gekommen, dass ich das Flag -std=c++0x oder -std=gnu++0x , aber ich weiß nicht viel über Flags. Kann mir jemand helfen? (Ich benutze Ubuntu 12.04.) Hier ist der Fehler, den ich vom Compiler […]

Wie kann ich meinen benutzerdefinierten Typ so einstellen, dass er mit “range-based for loops” funktioniert?

Wie viele Leute habe ich in diesen Tagen die verschiedenen functionen von C + 11 getestet. Einer meiner Favoriten ist die “range-based for loops”. Ich verstehe das: for(Type& v : a) { … } Ist äquivalent zu: for(auto iv = begin(a); iv != end(a); ++iv) { Type& v = *iv; … } Und das begin() […]

Ist vorzeichenbehafteter Integerüberlauf immer noch undefiniertes Verhalten in C ++?

Wie wir wissen, ist vorzeichenbehafteter Ganzzahlüberlauf ein nicht definiertes Verhalten . Aber es gibt etwas Interessantes in C ++ 11 cstdint Dokumentation: vorzeichenbehafteter Integer-Typ mit einer Breite von jeweils genau 8, 16, 32 und 64 Bits ohne Padding-Bits und Verwendung des Zweierkomplements für negative Werte (wird nur bereitgestellt, wenn die Implementierung den Typ direkt unterstützt) […]