Articles of c ++ 11

Warum sollte ich std :: enable_if in functionssignaturen vermeiden?

Scott Meyers veröffentlichte Inhalt und Status seines nächsten Buches EC ++ 11. Er schrieb, dass ein Element im Buch “Vermeiden Sie std::enable_if in functionssignaturen” sein könnte . std::enable_if kann als functionsargument, als Rückgabetyp oder als classnvorlage oder functionsvorlagenparameter verwendet werden, um functionen oder classn aus der Überladungsauflösung bedingt zu entfernen. In dieser Frage werden alle […]

Sind mehrere Mutationen in Initialisiererlisten undefiniertes Verhalten?

Ich bin neugierig auf Initialisierungslisten und Sequenzpunkte. Ich habe vor einiger Zeit gelesen, dass die Reihenfolge der Auswertung in Initialisierungslisten von links nach rechts ist. Wenn das so ist, dann muss zwischen den Punkten der Bewertung eine Art von Sequenzpunkt liegen, bin ich falsch? Also mit dem gesagt ist der folgende gültige Code? Gibt es […]

C ++ 0x Regex in GCC

Der folgende Code: #include using namespace std; (snippage) regex_search(s, m, re); funktioniert in Microsoft C ++, aber GCC 4.4.3 gibt die folgende Fehlermeldung aus: /usr/include/c++/4.4/tr1_impl/regex:2255: Warnung: Inline-function ‘bool std :: regex_search (_Bi_iter, _Bi_iter, std :: match_results &, const std :: basic_regex &, std :: regex_constants :: match_flag_type) [mit _Bi_iter = __gnu_cxx :: __ normaler_iterator, std […]

Was sagt auto && uns?

Wenn Sie Code wie lesen auto&& var = foo(); Dabei ist foo eine function, die als Wert vom Typ T . Dann ist var ein lvalue des Typs rvalue Verweis auf T Aber was bedeutet das für var ? Heißt das, wir dürfen die Ressourcen von var stehlen? Gibt es vernünftige Situationen, in denen Sie […]

conexpr und Initialisierung eines statischen const void pointer mit reinterpret cast, welcher Compiler ist richtig?

Betrachten Sie das folgende Stück Code: struct foo { static constexpr const void* ptr = reinterpret_cast(0x1); }; auto main() -> int { return 0; } Das obige Beispiel kompiliert in g ++ v4.9 ( Live Demo ), während es in clang v3.4 ( Live Demo ) nicht kompiliert werden kann und erzeugt den folgenden Fehler: […]

C ++ 11: Korrekte Initialisierung von std :: array?

Wenn ich ein std :: -Array wie folgt initialisiere, gibt der Compiler eine Warnung über fehlende Klammern aus std::array a = {1, 2, 3, 4}; Dies behebt das Problem: std::array a = {{1, 2, 3, 4}}; Dies ist die Warnmeldung: missing braces around initializer for ‘std::array::value_type [4] {aka int [4]}’ [-Wmissing-braces] Ist das nur ein […]

Ist diese unendliche Rekursion UB?

In C ++ 11, als eine Endlosschleife ohne Nebenwirkungen, ist das folgende Programm UB: int main() { while (true) {} } Ist das Folgende auch UB? void foo() { foo(); } int main() { foo(); } Zitate aus dem Standard für beide Programme wären ideal.

Wann wird Überladen als Referenz übergeben (l-Wert und r-Wert), wird Wert-zu-Wert bevorzugt?

Ich habe gesehen, dass ein operator= geschrieben, um einen Parameter des gleichen Typs als Wert zu nehmen, der sowohl als Kopierzuweisungsoperator als auch als Zuweisungsoperator in C ++ 11 dient: Foo& operator=(Foo f) { swap(f); return *this; } Wo die Alternative wäre mehr als doppelt so viele Zeilen mit viel Code-Wiederholung, und das Potenzial für […]

Wie man die make_unique function in C ++ 11 implementiert?

Mein Compiler unterstützt make_unique nicht. Wie schreibe ich? template unique_ptr make_unique( Args&&… args );

Dynamisch ausgerichtete Speicherzuordnung in C ++ 11

posix_memalign und _aligned_malloc unter Windows erlauben es, einen ausgerichteten Speicherbereich dynamisch zuzuweisen. Gibt es in C ++ 11 etwas Ähnliches? Soweit ich weiß, alignas Schlüsselwort alignas nur mit statisch zugewiesenen Objekten.