Articles of c ++ 11

Wie verwende ich ein benutzerdefiniertes Löschelement mit einem std :: unique_ptr-Member?

Ich habe eine class mit einem unique_ptr Mitglied. class Foo { private: std::unique_ptr bar; … }; Die Leiste ist eine class von Drittanbietern, die über eine create () – function und eine destroy () – function verfügt. Wenn ich ein std::unique_ptr damit in einer Standalone-function verwenden wollte, könnte ich tun: void foo() { std::unique_ptr bar(create(), […]

Was ist “Expression SFINAE”?

Unter http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx erklärt das VC ++ – Team offiziell, dass es das C ++ 11-corefeature “Expression SFINAE” noch nicht implementiert hat. Die folgenden Codebeispiele, die von http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html kopiert wurden, werden jedoch vom VC ++ – Compiler akzeptiert. Beispiel 1: template struct A {}; char xxx(int); char xxx(float); template A f(T){} int main() { f(1); } […]

Haben rvalue-Verweise auf const irgendeinen Nutzen?

Ich denke nicht, aber ich würde es gerne bestätigen. Gibt es irgendeine Verwendung für const Foo&& , wobei Foo ein classntyp ist?

Was ist der beste Weg, um über zwei oder mehr Container gleichzeitig zu iterieren?

C ++ 11 bietet mehrere Möglichkeiten zum Iterieren über Container. Beispielsweise: Bereichsbasierte Schleife for(auto c : container) fun(c) std :: for_each for_each(container.begin(),container.end(),fun) Was ist jedoch der empfohlene Weg, um über zwei (oder mehr) Container der gleichen Größe zu iterieren, um etwas zu erreichen wie: for(unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = […]

Warum benötigt das Lambda von C ++ 11 standardmäßig ein “veränderbares” Schlüsselwort für die Erfassung nach Wert?

Kurzes Beispiel: #include int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } Die Frage: Warum brauchen wir das mutable Schlüsselwort? Es unterscheidet sich […]

Zufallsgenerierung in C ++ 11, wie erzeugt man, wie funktionieren sie?

Ich bin kürzlich auf eine neue Art und Weise gestoßen, Zufallszahlen in C ++ 11 zu generieren, aber konnte nicht die Papiere verdauen, die ich darüber gelesen habe (was ist diese Engine, mathematischer Begriff wie Distribution, “wo alle produzierten Ganzzahlen gleich wahrscheinlich sind “). Kann mir bitte jemand erklären, was sie sind, was sie meinen, […]

Unterschied in make_shared und normal shared_ptr in C ++

std::shared_ptr p1 = std::make_shared(“foo”); std::shared_ptr p2(new Object(“foo”)); Viele google und stackoverflow Beiträge sind da, aber ich bin nicht in der Lage zu verstehen, warum make_shared effizienter ist als direkt shared_ptr . Kann mir jemand Schritt für Schritt erklären, welche Objekte erstellt und welche Operationen von beiden ausgeführt werden, damit ich verstehen kann, wie make_shared effizient […]

C ++ 11 Bereichsbasierte Schleife: Abrufen von Element nach Wert oder Verweis auf const

Beim Lesen einiger Beispiele für bereichsbasierte Schleifen schlagen sie zwei Hauptwege vor: 1 , 2 , 3 , 4 std::vector vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec’s items by changing x } oder for (auto x : vec) { // […]

Warum gibt es keine std :: shared_ptr Spezialisierung?

Der Standard stellt eine Template-Spezialisierung von std::unique_ptr bereit, die das delete[] von seinem Destruktor korrekt aufruft: void func() { std::unique_ptr arr(new int[10]); ……. } Mit std::shared_ptr diese Spezialisierung nicht verfügbar, daher ist es notwendig, einen Deleter bereitzustellen, der korrekt delete[] aufruft: void func() { // Usage shared_ptr array (new double [256], [](double* arr) { delete […]

Rvalue-Referenz wird als L-Wert behandelt?

Ich habe diese Antwort geschrieben: https://Stackoverflow.com/a/28459180/2642059, die den folgenden Code enthält: void foo(string&& bar){ string* temp = &bar; cout << *temp << " @:" << temp << endl; } Ist bar ein rvalue oder ein lvalue? Ich frage, weil ich offensichtlich die Adresse eines R-Wertes nicht nehmen kann, aber ich kann die Adresse einer R-Wert-Referenz […]