Range-based for, nullptr ed enum class
Usi le comodità di C++11: range-based for, nullptr ed enumerazioni fortemente tipizzate
Range-based for, nullptr ed enum class è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Tre miglioramenti rapidi di C++11
C++11 ha introdotto molti piccoli miglioramenti. Eccone tre che userà ogni giorno: range-based for, nullptr ed enum class.
Riepilogo del range-based for
Iteri su qualsiasi contenitore che disponga di begin() e end(), senza dover eseguire operazioni aritmetiche sugli indici.
for (const auto& x : v) {
process(x);
}Che cosa sostituisce
Il prolisso ciclo basato sugli iteratori diventa una sola riga.
// Before C++11
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
process(*it);
}nullptr è migliore di NULL
nullptr è un letterale di puntatore nullo tipizzato. Evita l'ambiguità nella risoluzione degli overload causata da NULL, una macro per 0.
void f(int);
void f(int*);
f(NULL); // calls f(int)
f(nullptr); // calls f(int*)Perché nullptr è migliore
Usi nullptr in modo coerente:
- Tipo distinto (
std::nullptr_t) - Intento più chiaro
- Utilizzabile nella metaprogrammazione con i template
- Non può convertirsi accidentalmente in
int
enum semplice: una trappola
Gli enum dello stile tradizionale espongono i propri nomi nell'ambito circostante e si convertono implicitamente in int.
enum Color { RED, GREEN, BLUE };
int c = RED; // implicit conversion, no warning
// RED, GREEN, BLUE leak into global scopeenum class: con ambito e tipizzato
In C++11, enum class richiede la qualificazione e impedisce la conversione implicita in int.
enum class Color { Red, Green, Blue };
Color c = Color::Red;
// int n = Color::Red; // ERROR
std::cout << static_cast<int>(c); // explicit conversionSpecificare il tipo sottostante
È possibile fissare la dimensione di memoria di un enum class a uno specifico tipo intero.
enum class Status : uint8_t { OK = 0, FAIL = 1, RETRY = 2 };Dichiarazione anticipata di enum class
Poiché il tipo sottostante è noto, le enum class possono essere dichiarate in anticipo: è utile per ridurre le inclusioni tra gli header.
// header A
enum class Color : int;
// header B (full definition)
enum class Color : int { Red, Green, Blue };Quando va bene un enum semplice
Gli enum semplici hanno ancora dei casi d'uso: maschere di bit per flag interi, quando si desidera davvero una conversione implicita. Documenti esplicitamente questa scelta progettuale.
Suggerimento per la migrazione
Quando modernizza una codebase, converta gradualmente gli enum semplici in enum class. Cerchi i punti che dipendono dalla conversione implicita in int e aggiunga static_cast.
Verifica rapida
Che cosa rende enum class più sicuro di un enum semplice?
Riepilogo
Tre miglioramenti rapidi di C++11: il range-based for elimina il codice ripetitivo degli iteratori, nullptr sostituisce NULL ed enum class offre enum con ambito e sicurezza dei tipi. Li usi tutti come impostazione predefinita.
Domande Frequenti
La lezione «Range-based for, nullptr ed enum class» è gratuita?
Sì — il testo completo di «Range-based for, nullptr ed enum class» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Range-based for, nullptr ed enum class»?
Usi le comodità di C++11: range-based for, nullptr ed enumerazioni fortemente tipizzate Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Range-based for, nullptr ed enum class»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- auto, decltype e deduzione dei tipi
- Range-based for, nullptr ed enum class
- Espressioni lambda: capture, mutable e generiche
- Structured bindings e if-init in C++17