Articles of c ++ 11

😃 (und andere Unicode-Zeichen) in Bezeichnern, die von g ++ nicht erlaubt sind

Ich muss herausfinden, dass ich 😃 nicht als gültigen Bezeichner mit g ++ 4.7 verwenden kann, selbst -fextended-identifiers Option -fextended-identifiers aktiviert ist: int main(int argc, const char* argv[]) { const char* 😃 = “I’m very happy”; return 0; } main.cpp: 3: 3: Fehler: stray ‘\ 360’ im Programm main.cpp: 3: 3: Fehler: stray ‘\ 237’ […]

Nicht-classn-Rvalues ​​haben immer cv-unqualifizierte Typen

§ 3.10 Abschnitt 9 sagt “Nicht-classn-Rvalues ​​haben immer cv-unqualifizierte Typen”. Das hat mich wundern … int foo() { return 5; } const int bar() { return 5; } void pass_int(int&& i) { std::cout << "rvalue\n"; } void pass_int(const int&& i) { std::cout << "const rvalue\n"; } int main() { pass_int(foo()); // prints "rvalue" pass_int(bar()); // […]

static_assert schlägt die Kompilierung fehl, obwohl die Template-function nirgendwo aufgerufen wird

Ich benutze g ++ 4.6.3, (derzeit Standard-Paket für ubuntu 12.04) mit dem Flag c ++ 0x, und stolpere darüber: template inline T getValue(AnObject&) { static_assert(false , “this function has to be implemented for desired type”); } mit dem Kompilierungserrors: static_assertion failed “this function has to be implemented for the desired type” obwohl ich diese function […]

Aufrufen einer function für jedes variadische Vorlagenargument und ein Array

Ich habe also einen Typ X : typedef … X; und eine Template-function f : class void f(X& x_out, const T& arg_in); und dann eine function g : void g(const X* x_array, size_t x_array_size); Ich muss eine variadic Vorlagenfunktion h schreiben, die dies tut: template void h(Args… args) { constexpr size_t nargs = sizeof…(args); // […]

Warum gibt es keinen Placement-Lösch-Ausdruck in C ++?

Warum hat C ++ kein Placement löschen, das direkt der Platzierung neu entspricht, dh den Destruktor aufruft und entsprechenden Placement-Delete-Operator aufruft? Beispielsweise: MyType *p = new(arena) MyType; … //current technique p->~MyType(); operator delete(p, arena); //proposed technique delete(arena) p;

Flüchtig in C ++ 11

In C ++ 11 Standard wurde das Maschinenmodell von einer einzelnen Thread-Maschine zu einer Multi-Thread-Maschine geändert. Bedeutet das, dass das typische static int x; void func() { x = 0; while (x == 0) {} } static int x; void func() { x = 0; while (x == 0) {} } static int x; void […]

Was ist der partielle Bestellvorgang in der Vorlagenableitung?

Ich lese über den c ++ 11-Standard, kann aber die Bedeutung der folgenden Beispiele nicht gut verstehen. Beispiele sind sehr bevorzugt. Zwei Arten von Typen werden verwendet, um die partielle Ordnung zu bestimmen. Für jede der beteiligten Vorlagen gibt es den ursprünglichen functionstyp und den transformierten functionstyp. [Anmerkung: Die Erzeugung des transformierten Typs ist in […]

C ++ 11 “Auto” Semantik

Wenn ich C ++ 11 auto , wie lauten die Regeln für den Typabzug, ob es zu einem Wert oder einer Referenz aufgetriggers wird? ZB manchmal ist es klar: auto i = v.begin(); // Copy, begin() returns an iterator by value Diese sind weniger klar: const std::shared_ptr& get_foo(); auto p = get_foo(); // Copy or […]

C ++ 11 Initialisierungsliste schlägt fehl – aber nur für Listen der Länge 2

Ich habe einen obskuren Logging-Bug auf die Tatsache untersucht, dass Initialisierungslisten der Länge 2 ein Sonderfall zu sein scheinen! Wie ist das möglich? Der Code wurde mit Apple LLVM Version 5.1 (clang-503.0.40) mit CXXFLAGS=-std=c++11 -stdlib=libc++ . #include #include #include using namespace std; typedef vector Strings; void print(string const& s) { printf(s.c_str()); printf(“\n”); } void print(Strings […]

Wie wird die std :: -function implementiert?

Gemäß den Quellen, die ich gefunden habe, wird ein Lambda-Ausdruck im Wesentlichen durch den Compiler implementiert, der eine class mit überladenem functionsaufrufoperator und den referenzierten Variablen als Mitglieder erzeugt. Dies legt nahe, dass die Größe der Lambda-Ausdrücke variiert, und bei genügend Referenzvariablen kann diese Größe beliebig groß sein . Eine std::function sollte eine feste Größe […]