Articles of c ++ 11

Legalität der COW std :: string Implementierung in C ++ 11

Es war mein Verständnis, dass Copy-on-Write keine praktikable Möglichkeit ist, eine konforme std::string in C ++ 11 zu implementieren, aber als es kürzlich in Diskussion kam, konnte ich diese Aussage nicht direkt unterstützen. Bin ich richtig, dass C ++ 11 keine COW-basierten Implementierungen von std::string ? Wenn ja, wird diese Einschränkung im neuen Standard (wo) […]

Warum ist die Initialisierung der Liste (mit geschweiften Klammern) besser als die Alternativen?

MyClass a1 {a}; // clearer and less error-prone than the other three MyClass a2 = {a}; MyClass a3 = a; MyClass a4(a); Warum? Ich konnte keine Antwort auf SO finden, also lass mich meine eigene Frage beantworten.

C ++ 0x hat keine Semaphoren? Wie synchronisiert man Threads?

Stimmt es, dass C ++ 0x ohne Semaphore kommt? Es gibt bereits einige Fragen zu Stack Overflow bezüglich der Verwendung von Semaphoren. Ich benutze sie (Posix Semaphoren) die ganze Zeit, um einen Thread auf ein Ereignis in einem anderen Thread warten zu lassen: void thread0(…) { doSomething0(); event1.wait(); … } void thread1(…) { doSomething1(); event1.post(); […]

c ++ 11 Rückgabewertoptimierung oder Verschieben?

Ich verstehe nicht, wann ich std::move und wann ich den Compiler optimieren lassen soll … zum Beispiel: using SerialBuffer = vector; // let compiler optimize it SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( begin( buffer ), end( buffer ) ); // Return Value Optimization return buffer; } // explicit move […]

Unterschied zwischen “constexpr” und “const”

Was ist der Unterschied zwischen constexpr und const ? Wann kann ich nur einen davon benutzen? Wann kann ich beides verwenden und wie soll ich eines auswählen?

make_unique und perfekte Weiterleitung

Warum gibt es in der C ++ 11-Standardbibliothek keine std::make_unique functionsvorlage? ich finde std::unique_ptr p(new SomeUserDefinedType(1, 2, 3)); ein bisschen ausführlich. Wäre das Folgende nicht viel schöner? auto p = std::make_unique(1, 2, 3); Das verbirgt das new schön und erwähnt nur einmal den Typ. Wie auch immer, hier ist mein Versuch einer Implementierung von make_unique […]

std :: enable_if, um eine Elementfunktion bedingt zu kompilieren

Ich versuche, ein einfaches Beispiel zu erhalten, um zu verstehen, wie man std::enable_if . Nachdem ich diese Antwort gelesen hatte, dachte ich, es sollte nicht zu schwer sein, ein einfaches Beispiel zu finden. Ich möchte mit std::enable_if zwischen zwei Member-functionen wählen und nur eine davon verwenden. Leider kompiliert das folgende nicht mit gcc 4.7 und […]

Ein positives Lambda: ‘+ {}’ – Was ist das für eine Zauberei?

In Stack Overflow Frage Neudefinition von Lambdas in C ++ 11 nicht erlaubt, warum? , ein kleines Programm wurde angegeben, das nicht kompiliert: int main() { auto test = []{}; test = []{}; } Die Frage wurde beantwortet und alles schien in Ordnung zu sein. Dann kam Johannes Schaub und machte eine interessante Beobachtung : […]

Warum sind Preprozessor-Makros böse und welche Alternativen gibt es?

Ich habe das immer gefragt, aber ich habe nie eine wirklich gute Antwort erhalten; Ich denke, dass fast jeder Programmierer, bevor er überhaupt die erste “Hello World” geschrieben hat, auf einen Satz wie “Makro sollte niemals benutzt”, “Makro sind böse” und so weiter gekommen ist, meine Frage ist: Warum? Mit der neuen C ++ 11 […]

Ist std :: unique_ptr erforderlich, um die vollständige Definition von T zu kennen?

Ich habe Code in einer Kopfzeile, die folgendermaßen aussieht: #include class Thing; class MyClass { std::unique_ptr my_thing; }; Wenn ich diesen Header in eine cpp-Datei einfüge, die die Thing Typdefinition nicht enthält, wird diese Datei nicht unter VS2010-SP1 kompiliert: 1> C: \ Programme (X 86) \ Microsoft Visual Studio 10.0 \ VC \ include \ […]