Articles of c ++ 11

Il pacchetto di parametri deve essere alla fine dell’elenco dei parametri … Quando e perché?

Non capisco il motivo per cui un pacchetto di parametri deve essere alla fine dell’elenco dei parametri se quest’ultimo è associato a una class, mentre il vincolo è rilassato se l’elenco dei parametri è parte di una dichiarazione del metodo membro. In altri termini, questo compila: class C { template void fn() { } }; […]

Qual è il punto delle funzioni di default in C ++ 11?

C ++ 11 aggiunge la possibilità di dire al compilatore di creare un’implementazione predefinita di una qualsiasi delle funzioni membro speciali . Mentre riesco a vedere il valore dell’eliminazione di una funzione, dov’è il valore di default di una funzione? Basta lasciarlo in bianco e il compilatore lo farà comunque. L’unico punto che posso vedere […]

Devo usare atomico per la variabile bool “exit”?

Ho bisogno di impostare un flag per un altro thread per uscire. Quell’altro thread controlla di volta in volta il flag di uscita. Devo usare atomico per la bandiera o solo un semplice bool è sufficiente e perché (con un esempio di cosa esattamente potrebbe andare storto se uso il bool semplice)? #include bool exit […]

L’Idioma Copia-e-Scambia dovrebbe diventare l’Idioma Copia-e-Sposta in C ++ 11?

Come spiegato in questa risposta , l’idioma copy-and-swap è implementato come segue: class MyClass { private: BigClass data; UnmovableClass *dataPtr; public: MyClass() : data(), dataPtr(new UnmovableClass) { } MyClass(const MyClass& other) : data(other.data), dataPtr(new UnmovableClass(*other.dataPtr)) { } MyClass(MyClass&& other) : data(std::move(other.data)), dataPtr(other.dataPtr) { other.dataPtr= nullptr; } ~MyClass() { delete dataPtr; } friend void swap(MyClass& first, […]

Modelli C ++ per le prestazioni?

Ho visto online alcune volte che è stato detto che C ++ può essere sempre più veloce usando i template. Qualcuno potrebbe spiegare, anche a un livello basso perché questo è esattamente? Ho sempre pensato che una caratteristica così “carina” avrebbe avuto un sovraccarico come la maggior parte dei concetti utili. Sono davvero incuriosito da […]

Ricerca puntatore raw per set di unique_ptrs

Spesso mi trovo a voler scrivere un codice come questo: class MyClass { public: void addObject(std::unique_ptr&& newObject); void removeObject(const Object* target); private: std::set<std::unique_ptr> objects; }; Tuttavia, gran parte dell’interfaccia std :: set è praticamente inutile con std :: unique_ptrs poiché le funzioni di ricerca richiedono i parametri std :: unique_ptr (che ovviamente non ho perché […]

Il ciclo su ranged è favorevole alle prestazioni?

Leggendo varie domande qui su Stack Overflow su iteratori e prestazioni C ++ **, ho iniziato a chiedermi se for(auto& elem : container) viene “espanso” dal compilatore nella migliore versione ansible? (Un po ‘come l’ auto , che il compilatore inserisce subito nel giusto tipo e quindi non è mai più lento e talvolta più […]

Facendo un static_assert che un tipo di modello è un altro modello

Come faccio static_assert questo modo? Forse Boost lo supporta se non C ++ o nuove funzionalità in C ++ 11? template struct foo {}; template struct bar { static_assert(FooType is indeed foo for some T,”failure”); //how? };

i pacchetti di parametri template accedono al tipo Nth e all’elemento Nth

Il seguente documento è la prima proposta che ho trovato per i pacchetti di parametri del modello. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1603.pdf A pagina 16, parla dell’introduzione di due nuovi operatori [] e per l’accesso agli elementi del pacchetto di parametri e ai tipi di pacchetti di parametri. The suggested syntax for such an operator involves two new operators: […]

Errore del linker C ++ con constexpr statico di class

Sto compilando il seguente semplice programma con g++-4.6.1 –std=c++0x : #include struct S { static constexpr int X = 10; }; int main() { return std::min(S::X, 0); }; Ottengo il seguente errore del linker: /tmp/ccBj7UBt.o: In function `main’: scratch.cpp:(.text+0x17): undefined reference to `S::X’ collect2: ld returned 1 exit status Mi rendo conto che i membri […]