Articles of c ++ 11

Bind gegen Lambda?

Ich habe eine Frage, welcher Stil bevorzugt wird: std :: bind Vs Lambda in C ++ 0x. Ich weiß, dass sie verschiedenen Zwecken dienen, aber nehmen wir ein Beispiel von sich überschneidender functionalität. Verwenden von lambda : uniform_int distribution(1, 6); mt19937 engine; // lambda style auto dice = [&]() { return distribution(engine); }; bind : […]

Wie wahr ist “Willst du Speed? Übergabe nach Wert “

Korrigiere mich, wenn ich falsch liege. Sag ich habe: struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} … }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} … }; In X ‘s ctor, name ist offensichtlich eine Kopie von was auch immer Argument an X , X ruft die Bewegung […]

Gibt es einen Fall, in dem die Rückgabe einer RValue-Referenz (&&) sinnvoll ist?

Gibt es einen Grund, wenn eine function eine RValue-Referenz zurückgeben soll ? Eine Technik oder ein Trick oder ein Idiom oder ein Muster? MyClass&& func( … ); Ich bin mir der Gefahr bewusst, Referenzen im Allgemeinen zurückzugeben, aber manchmal tun wir es trotzdem, nicht wahr ( T& T::operator=(T) ist nur ein idiomatisches Beispiel). Aber wie […]

Berechnen der Länge einer C-Zeichenfolge zum Zeitpunkt der Kompilierung. Ist das wirklich ein Constexpr?

Ich versuche, die Länge eines String-Literals zum Zeitpunkt der Kompilierung zu berechnen. Dazu benutze ich folgenden Code: #include int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf(“%d %d”, length(“abcd”), length(“abcdefgh”)); } Alles funktioniert wie erwartet, das Programm gibt 4 und 8 aus. Der […]

Erfassen einer Referenz durch Referenz in einem C ++ 11 Lambda

Bedenken Sie: #include #include std::function make_function(int& x) { return [&]{ std::cout << x << std::endl; }; } int main() { int i = 3; auto f = make_function(i); i = 5; f(); } Ist dieses Programm garantiert 5 auszugeben, ohne undefiniertes Verhalten aufzurufen? Ich verstehe, wie es funktioniert, wenn ich x nach Wert ( [=] […]

Wie ist Meyers Implementierung eines Singleton tatsächlich ein Singleton

Ich habe viel über Singletons gelesen, wann sie sollten und nicht verwendet werden sollten und wie man sie sicher implementiert. Ich schreibe in C ++ 11 und bin auf die faul initialisierte Implementierung eines Singleton durch Meyer gestoßen, wie man in dieser Frage sieht . Diese Implementierung ist: static Singleton& instance() { static Singleton s; […]

“Downcasting” unique_ptr bis unique_ptr

Ich habe eine Reihe von Fabriken, die unique_ptr . Unter der Haube bieten sie jedoch pointers auf verschiedene abgeleitete Typen, dh unique_ptr , unique_ptr , unique_ptr usw. Angesichts DerivedA : Derived und Derived : Base wir: unique_ptr DerivedAFactory() { return unique_ptr(new DerivedA); } Was ich tun muss, ist, den pointers von der zurückgegebenen unique_ptr auf […]

Element aus Vektor entfernen, während in C ++ 11 Bereich für “Schleife”?

Ich habe einen Vektor von IInventory *, und ich bin durch die Liste mit C ++ 11 Bereich für, um Sachen mit jedem zu tun. Nachdem ich einige Sachen mit einem gemacht habe, möchte ich es vielleicht aus der Liste entfernen und das Objekt löschen. Ich weiß, dass ich auf dem pointers jederzeit delete kann, […]

Das Überprüfen eines Mitglieds ist möglich, möglicherweise in einer Basisklasse, C ++ 11-Version

In https://StackOverflow.com/a/1967183/134841 wird eine Lösung bereitgestellt, um statisch zu prüfen, ob ein Member existiert, möglicherweise in einer Unterklasse eines Typs: template class has_resize_method { class yes { char m;}; class no { yes m[2];}; struct BaseMixin { void resize(int){} }; struct Base : public Type, public BaseMixin {}; template class Helper{}; template static no deduce(U*, […]

C ++ Module – warum wurden sie aus C ++ 0x entfernt? Werden sie später zurück sein?

Ich habe gerade diesen alten C ++ 0x-Entwurf über Module in C ++ 0x entdeckt. Die Idee bestand darin, aus dem aktuellen .h / .cpp-System auszusteigen, indem nur CPP-Dateien geschrieben wurden, die dann beim Kompilieren Moduldateien erzeugten, die dann wiederum von den anderen CPP-Dateien verwendet wurden. Das sieht nach einem wirklich tollen Feature aus. Aber […]