Articles of c ++ 11

C ++ 0x Lambda-Capture nach Wert immer const?

Gibt es eine Möglichkeit, nach Wert zu erfassen und den erfassten Wert nicht konstant zu machen? Ich habe einen Bibliotheksfunktor, den ich erfassen und eine Methode nennen möchte, die nicht-const ist, aber sollte. Das Folgende kompiliert nicht, aber macht foo :: operator () const es behebt. struct foo { bool operator () ( const bool […]

Reihenfolge der Auswertung von Elementen in der Listeninitialisierung

In dem anderen Thema gab @Dietmar diese Lösung: template std::tuple parse(std::istream& in) { return std::tuple{ T(in)… }; } mit der Aussage, Die Verwendung der geschweiften Klammerinitialisierung funktioniert, da die Reihenfolge der Auswertung der Argumente in einer geschweiften Initialisierungsliste die Reihenfolge ist, in der sie angezeigt werden . (betone meine) Der relevante Text aus dem C […]

Kann die Rückgabe einer lokalen Variablen nach Wert in C ++ 11/14 dazu führen, dass der Rückgabewert von rvalue erstellt wird, wenn keine Kopie / Verschiebung involviert ist?

Ich weiß, dass der Compiler in der folgenden Situation frei ist, den Rückgabewert von makeA (aber es ist auch frei, die Kopie oder den gesamten Auszug zu entfernen): struct A { A(A&); A(A&&); }; A makeA() { A localA; return localA; } Was ich mich frage, ist, ob der Compiler ein Objekt vom Typ A […]

Welche Kategorien (lvalue, rvalue, xvalue usw.) können in C ++ in Ausdrücke eingehen, die Provisorien vom Typ class erzeugen?

Hier ist ein Beispielcode: #include class Foo { public: explicit Foo(int x) : data(x) {}; Foo& operator++() { data += 1; return *this; } void *get_addr() { return (void*)this; } friend Foo operator + (const Foo& lhs, const Foo& rhs); friend std::ostream& operator << (std::ostream& os, const Foo& f); private: int data; }; std::ostream& operator […]

Visual Studio 2012 __cplusplus und C ++ 11

Wer weiß, warum __cplusplus in meinem Visual Studio 2012-C ++ – Projekt als 199711L (das ist das “alte” C ++) definiert ist? Sollte es 201103L nicht sagen, seit VS 2012 jetzt C ++ 11 Unterstützung hat? Selbst wenn ich C ++ 11-Header einfüge, ist es immer noch falsch definiert. Irgendwelche Hinweise?

std :: bindet eine gebundene function

Ich habe Schwierigkeiten herauszufinden, warum zum Teufel das nicht kompiliert wird. Ich habe eine Lambda-function, die eine std::function basierend auf einem Argument zurückgibt. Ich habe mein Problem auf dieses Snippet beschränkt (das keine lambdas verwendet, sondern meinen Fehler perfekt reproduziert): #include #include struct foo { template void bar(T data) { std::cout << data << "\n"; […]

Eclipse-Fehler ausschalten (das sind nicht wirklich Fehler)

Mögliche Duplikate: Deaktivieren Sie die Fehlererkennung von Eclipse. (Codan falsche Positive) Mit der GCC 4.8 / Clang 3.3 C ++ – Unterstützung, die Eclipse mit der Syntaxprüfung (hinsichtlich der Featureunterstützung) weit voraus ist, markiert Eclipse viele Dinge als Fehler, die eigentlich gültigen Code sind (Template Aliasing ist mein Hauptproblem, aber Es gibt noch andere Probleme). […]

Nachschlagetabelle mit consExpr

Ich möchte eine Nachschlagetabelle mit Koordinaten erstellen, zum Beispiel: int a[n][2] = {{0,1},{2,3}, … } Für ein bestimmtes n , das zur Kompilierzeit erstellt wird. Ich fing an, in constexpr zu constexpr , aber es scheint wie eine function, die einen constexpr std::vector<std::array > ist keine Option, wie ich bekomme: invalid return type ‘std::vector<std::array >’ […]

C ++ 11 – static_assert in der constexpr-function?

Wie würde man eine static_assert innerhalb einer constexpr function richtig machen? Beispielsweise: constexpr int do_something(int x) { static_assert(x > 0, “x must be > 0”); return x + 5; } Dies ist kein gültiger C ++ 11-Code, da eine constexpr-function nur eine return-statement enthalten muss. Ich glaube nicht, dass der Standard eine Ausnahme hat, obwohl […]

Syntax für universelle Referenzen

Dies ist eine rvalue Referenz: void foo(int&& a); Es bindet nicht an lvalues: int i = 42; foo(i); // error Dies ist eine universelle Referenz: template void bar(T&& b); Es bindet an rvalues ​​und es bindet auch an lvalues: bar(i); // okay Dies ist eine rvalue Referenz: template struct X { void baz(T&& c); }; […]