Articles of c ++ 11

Wie initialisiere ich std :: array elegant, wenn T nicht standardmäßig konstruierbar ist?

Wie initialisiere ich std::array wenn T nicht standardmäßig konstruierbar ist ? Ich weiß, dass es möglich ist, es so zu initialisieren: T t{args}; std::array a{t, t, t, t, t}; Aber n für mich ist Template-Parameter: template void f(T value) { std::array items = ??? } Und selbst wenn es keine Vorlage war, ist es ziemlich […]

Zeitgesteuerte Bereichsüberprüfung für std :: vector

Das Ziel: Ich hätte gerne eine Range-Version des operator [] von std::vector für meine Debug-Builds und keine Bereichsüberprüfung im Release-Modus. Die Bereichsüberprüfung im Debug-Modus ist offensichtlich gut für das Debugging, aber es verursacht eine Verlangsamung von 5% – 10% in meinem Release-Code, den ich gerne vermeiden würde. Mögliche Lösungen: Ich habe eine Lösung in Stroustrups […]

Werden Move Constructors automatisch erstellt?

Ich habe eine große class mit vielen STL-Containern. Wird der Compiler automatisch einen Move-Konstruktor erstellen, der diese Container zum Ziel verschiebt oder ich selbst erstellen muss?

Konvertiere std :: tuple in std :: array C ++ 11

Wenn ich std::tuple (wo der Typ homogen ist), gibt es eine Stock-function oder einen Konstruktor, der in std::array konvertiert werden soll? Edit:: Ich konnte es mit rekursivem Template-Code arbeiten lassen (meine Antwort im Entwurf unten). Ist das der beste Weg, damit umzugehen? Es scheint, als würde es eine Aktienfunktion dafür geben … Oder wenn Sie […]

Wo kann ich in C ++ 11 alignas () verwenden?

Um meinen Code zu standardisieren und portabler zu machen, habe ich ihn ersetzt #ifdef __GNUC__ typedef __attribute__((aligned(16))) float aligned_block[4]; #else typedef __declspec(align(16)) float aligned_block[4]; #endif mit typedef float alignas(16) aligned_block[4]; in C ++ 11. Gnu (4.8) mag das nicht, aber beschwert sich test.cc:3:9: warning: attribute ignored [-Wattributes] typedef float alignas(16) aligned_block[4]; ^ test.cc:3:9: note: an […]

Warum haben Lambda-functionen in C ++ 11 keine function Typen?

Ich spiele mit den funktionalen functionen von c ++ 11 herum. Eine Sache, die ich seltsam finde, ist, dass der Typ einer Lambda-function eigentlich KEINE function ist. Lambda’s scheinen mit dem Typ-Inferenz-Mechanismus nicht besonders gut zu spielen. Attached ist ein kleines Beispiel, in dem ich die zwei Argumente einer function zum Hinzufügen von zwei ganzen […]

Wie deklariert man einen Atomvektor in C ++?

Ich beabsichtige, einen Vektor atomarer Variablen zu deklarieren, die als Zähler in einem Multithread-Programm verwendet werden sollen. Hier ist was ich versucht habe: #include #include int main(void) { std::vector<std::atomic> v_a; std::atomic a_i(1); v_a.push_back(a_i); return 0; } Und das ist die ärgerlich ausführliche Fehlermeldung von gcc 4.6.3: In file included from /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:34:0, from /usr/include/c++/4.6/bits/allocator.h:48, from /usr/include/c++/4.6/vector:62, […]

Überladene Lambdas in C ++ und Unterschiede zwischen clang und gcc

Ich spiele mit einem Trick, um Lambdas in C ++ zu überladen. Speziell: // For std::function #include // For std::string #include // For std::cout #include template struct overload : F… { overload(F… f) : F(f)… {} }; template auto make_overload(F… f) { return overload(f…); } int main() { std::function f = [](int x,int y) { […]

Vorlagenspezialisierung und enable_if Probleme

Ich stoße auf ein Problem in Bezug auf die angemessene Verwendung von enable_if und Template-Spezialisierung. Nach der Änderung des Beispiels (aus Gründen der Vertraulichkeit) folgt ein vergleichbares Beispiel: Ich habe eine function namens “less”, die prüft, ob 1. arg kleiner als 2. arg ist. Nehmen wir an, ich möchte 2 verschiedene Arten von Implementierungen haben, […]

Was macht dieser variable Template-Code?

template void for_each_argument(F f, Args&&… args) { [](…){}((f(std::forward(args)), 0)…); } Es wurde kürzlich auf isocpp.org ohne Erklärung vorgestellt.