Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Frontespizio
Copyright
Indice
Ringraziamenti
Introduzione
1. Deduzione del tipo
Elemento 1 – La deduzione del tipo nei template
Caso 1 – ParamType è un riferimento o un puntatore, ma non un riferimento universale
Caso 2 – ParamType è un riferimento universale
Caso 3 – ParamType non è né un puntatore né un riferimento
Argomenti array
Argomenti funzione
Elemento 2 – La deduzione del tipo auto
Elemento 3 – Come funziona decltype
Elemento 4 – Come visualizzare i tipi dedotti
Editor IDE
Diagnostiche di compilazione
Output runtime
2. Il modificatore auto
Elemento 5 – Preferire auto alle dichiarazioni esplicite del tipo
Elemento 6 – Uso di un inizializzatore di tipo esplicito quando auto deduce tipi indesiderati
3. Passare al C++ moderno
Elemento 7 – Distinguere fra () e {} nella creazione degli oggetti
Elemento 8 – Preferire nullptr a 0 e NULL
Elemento 9 – Preferire le dichiarazioni alias ai typedef
Elemento 10 – Preferire gli enum con visibilità a quelli senza visibilità
Elemento 11 – Preferire le funzioni “cancellate” a quelle private undefined
Elemento 12 – Dichiarare con override le funzioni che lo richiedono
Elemento 13 – Preferire i const_iterator agli iterator
Elemento 14 – Dichiarare noexcept le funzioni che non emettono eccezioni
Elemento 15 – Usare constexpr quando possibile
Elemento 16 – Rendere sicure per i thread le funzioni membro const
Elemento 17 – La generazione di funzioni membro speciali
4. I puntatori smart
Elemento 18 – Uso di std::unique_ptr per la gestione delle risorse a proprietà esclusiva
Elemento 19 – Usare std::shared_ptr per la gestione delle risorse a proprietà condivisa
Elemento 20 – Usare std::weak_ptr per puntatori di tipo std::shared_ptr che possono “pendere”
Elemento 21 – Usare std::make_unique e std::make_shared per gestire l’uso di new
Elemento 22 – Idioma Pimpl: definire speciali funzioni membro nel file di implementazione
5. Riferimenti rvalue, semantica di spostamento e perfect-forward
Elemento 23 – Parliamo di std::move e std::forward
Elemento 24 – Distinguere i riferimenti universali e riferimenti rvalue
Elemento 25 – Usare std::move sui riferimenti rvalue e std::forward sui riferimenti universali
Elemento 26 – Evitare l’overloading sui riferimenti universali
Elemento 27 – Alternative all’overloading per riferimenti universali
Abbandonare l’overloading
Passaggio per const T&
Passaggio per valore
L’approccio tag dispatch
Vincolare i template che accettano riferimenti universali
Compromessi
Elemento 28 – Il collasso dei riferimenti
Elemento 29 – Operazioni di spostamento: se non sono disponibili, economiche o utilizzate
Elemento 30 – Casi problematici di perfect-forward
Inizializzatori a graffe
0 o Null come puntatori nulli
Dati membro static const interi solo nella dichiarazione
Nomi di funzioni overloaded e nomi template
Campi bit
Conclusioni
6. Le espressioni lambda
Elemento 31 – Evitare le modalità di cattura di default
Elemento 32 – Usare la cattura iniziale per spostare gli oggetti nelle closure
Elemento 33 – Usate decltype sui parametri auto&& per inoltrarli con std::forward
Elemento 34 – Preferite le lambda a std::bind
7. L’API per la concorrenza
Elemento 35 – Preferire la programmazione basata a task piuttosto che basata a thread
Elemento 36 – Specificare std::launch::async quando è essenziale l’asincronicità
Elemento 37 – Rendere gli std::thread non joinable su tutti i percorsi
Elemento 38 – Attenzione al comportamento variabile del distruttore dell’handle del thread
Elemento 39 – Considerate l’uso di future void per la comunicazione di eventi “one-shot”
Elemento 40 – Usare std::atomic per la concorrenza e volatile per la memoria speciale
8. Tecniche varie
Elemento 41 – Considerare il passaggio per valore per i parametri la cui copia è “poco costosa” e che pertanto vengono sempre copiati
Elemento 42 – Impiegare l’emplacement al posto dell’inserimento
Indice analitico
Informazioni sul Libro
Circa l’autore
← Prev
Back
Next →
← Prev
Back
Next →