Articles of c ++ 11

Tabella di ricerca con constexpr

Sto cercando di creare una tabella di ricerca delle coordinate, qualcosa del tipo: int a[n][2] = {{0,1},{2,3}, … } Per una data n , da creare in fase di compilazione. Ho iniziato a guardare in constexpr , ma sembra una funzione che restituisce un constexpr std::vector<std::array > non è un’opzione, poiché ottengo: invalid return type […]

Semantica “automatica” di C ++ 11

Quando uso C ++ 11 auto , quali sono le regole di deduzione del tipo per quanto riguarda la risoluzione di un valore o un riferimento? Ad esempio, a volte è chiaro: auto i = v.begin(); // Copy, begin() returns an iterator by value Questi sono meno chiari: const std::shared_ptr& get_foo(); auto p = get_foo(); […]

L’elenco di inizializzazione C ++ 11 non riesce, ma solo su elenchi di lunghezza 2

Ho rintracciato un oscuro errore di registrazione sul fatto che gli elenchi di inizializzatori di lunghezza 2 sembrano essere un caso speciale! Com’è ansible? Il codice è stato compilato con Apple LLVM versione 5.1 (clang-503.0.40), utilizzando 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”); […]

Volatile in C ++ 11

Nello standard C ++ 11 il modello della macchina è passato da una macchina a thread singolo a una macchina a più thread. Questo significa che il tipico static int x; void func() { x = 0; while (x == 0) {} } static int x; void func() { x = 0; while (x == […]

qual è la procedura di ordinazione parziale nella deduzione del modello

Ho letto dello standard c ++ 11 ma non riesco a capire bene che il significato del seguente esempio è molto preferito. Due tipi di tipi vengono utilizzati per determinare l’ordine parziale. Per ciascuno dei modelli coinvolti c’è il tipo di funzione originale e il tipo di funzione trasformata. [Nota: la creazione del tipo trasformato […]

decltype e parentesi

Non capisco l’ultima riga dell’esempio a pagina 148 del FCD (§7.6.1.2 / 4): const int&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) x4 = x3; […]

Come viene implementata la funzione std ::?

Secondo le fonti che ho trovato, un’espressione lambda è essenzialmente implementata dal compilatore creando una class con operatore di chiamata di funzione sovraccaricata e le variabili di riferimento come membri. Questo suggerisce che la dimensione delle espressioni lambda varia, e date abbastanza variabili di riferimento che le dimensioni possono essere arbitrariamente grandi . Una std::function […]

Qual è il significato del token “… …”? cioè un doppio operatore ellittico sul pacchetto parametri

Mentre sfogliavo l’attuale implementazione di gC di nuove intestazioni C ++ 11, mi sono imbattuto in “……” token. Puoi verificare che il seguente codice compila bene [tramite ideone.com]. template struct X { /* … */ }; template struct X // this line is the important one { /* … */ }; Quindi, qual è il […]

Come fare calcoli generici su pacchetti di argomenti eterogenei di una funzione modello variadica?

PREMESSA: Dopo aver giocato un po ‘con i modelli variadici, mi sono reso conto che realizzare qualcosa che va leggermente oltre le banali attività di meta-programmazione diventa presto piuttosto ingombrante. In particolare, mi sono ritrovato a desiderare un modo per eseguire operazioni generiche su un pacchetto di argomenti come iterate , split , loop in […]

Perché utilizzare funzioni di inizio e fine non membro in C ++ 11?

Ogni contenitore standard ha un metodo di begin e end per restituire gli iteratori per quel contenitore. Tuttavia, C ++ 11 ha apparentemente introdotto funzioni gratuite chiamate std::begin e std::end che chiamano le funzioni membro iniziale e end . Quindi, invece di scrivere auto i = v.begin(); auto e = v.end(); tu scriverai using std::begin; […]