Articles of c ++ 11

Soll ich in C ++ std :: function oder einen functionszeiger verwenden?

Wenn ich eine Callback-function in C ++ implementiere, sollte ich immer noch den functionszeiger C-style verwenden: void (*callbackFunc)(int); Oder sollte ich std :: function verwenden: std::function callbackFunc;

Warum sollte das Verhalten von std :: memcpy für Objekte, die nicht TrivialCopyable sind, undefiniert sein?

Von http://en.cppreference.com/w/cpp/string/byte/memcpy : Wenn die Objekte nicht TrivialCopyable sind (zB Skalare, Arrays, C-kompatible Strukturen), ist das Verhalten nicht definiert. Bei meiner Arbeit haben wir std::memcpy lange Zeit verwendet, um Objekte, die nicht TrivialCopyable sind, bitweise zu vertauschen: void swapMemory(Entity* ePtr1, Entity* ePtr2) { static const int size = sizeof(Entity); char swapBuffer[size]; memcpy(swapBuffer, ePtr1, size); memcpy(ePtr1, […]

Was sind die Unterschiede zwischen C-like, Konstruktor und einheitlicher Initialisierung?

TTBOMK, gibt es drei Möglichkeiten, eine Variable in C ++ zu initialisieren. int x = 0; // C-like initialization int x (0); // Constructor initialization int x {0}; // Uniform initialization Die einheitliche Initialisierung wurde für C ++ 11 eingeführt , um eine einheitlichere Syntax zum Initialisieren verschiedener Arten von Variablen bereitzustellen, die in C […]

Schöne Möglichkeit, einen Vektor an sich anzuhängen

Ich möchte den Inhalt des Vektors duplizieren und möchte, dass sie am Ende des ursprünglichen Vektors angehängt werden, dh v[i]=v[i+n] for i=0,2,…,n-1 Ich bin auf der Suche nach einem schönen Weg, nicht mit einer Schleife. Ich sah std::vector::insert aber die iterative Version verbietet einen Iterator zu *this (dh Verhalten ist nicht definiert). Ich habe auch […]

Wie funktioniert #include in C ++?

Ich habe aus einem Codeforces- Blog gelesen, dass, wenn wir #include in einem C++ Programm enthalten, keine anderen Header-Dateien enthalten sein müssen. Wie funktioniert #include und ist es in #include es zu verwenden, anstatt einzelne Header-Dateien #include ?

initializer_list und move semantics

Darf ich Elemente aus einer std::initializer_list ? #include #include template void foo(std::initializer_list list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } Da std::intializer_list besondere Aufmerksamkeit des Compilers erfordert und keine std::intializer_list wie normale Container der C ++ – Standardbibliothek hat, wäre ich eher sicher als Nachsicht und […]

Ist das Template-Argument (die Signatur) von std :: function nicht Teil seines Typs?

Was ist der Grund für die Unklarheit angesichts des folgenden Codes? Kann ich das umgehen oder muss ich die (nervigen) expliziten Casts behalten? #include using namespace std; int a(const function& f) { return f(); } int a(const function& f) { return f(0); } int x() { return 22; } int y(int) { return 44; } […]

Warum kann man nicht mit libc ++ im C ++ 0x-Modus klauen, um dieses boost :: program_options-Beispiel zu verknüpfen?

Kompilieren Sie diesen Beispielcode für boost :: program_options: http://svn.boost.org/svn/boost/trunk/libs/program_options/example/first.cpp … unter MacOS Lion (10.7.2), mit boost-1.48.0 installiert mit MacPorts: $ clang++ -v Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn) Target: x86_64-apple-darwin11.2.0 Thread model: posix $ clang++ -std=c++0x –stdlib=libc++ -lc++ -I/opt/local/include -L/opt/local/lib -lboost_program_options first.cpp -o first Undefined symbols for architecture x86_64: “boost::program_options::options_description::options_description(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator […]

Verfall des statischen Schlüsselwortes … nicht mehr?

In C ++ ist es möglich, das Schlüsselwort static innerhalb einer Übersetzungseinheit zu verwenden, um die Sichtbarkeit eines Symbols (entweder eine Variable oder eine functionsdeklaration) zu beeinflussen. In n3092 war dies veraltet: Anhang D.2 [depr.statisch] Die Verwendung des Schlüsselworts static ist veraltet, wenn Objekte im Namensraumbereich deklariert werden (siehe 3.3.6). In n3225 wurde dies entfernt. […]

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(), […]