0Pricing
C++ Academy · Lezione

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 scope

enum 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 conversion

Specificare 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

  1. auto, decltype e deduzione dei tipi
  2. Range-based for, nullptr ed enum class
  3. Espressioni lambda: capture, mutable e generiche
  4. Structured bindings e if-init in C++17
← Torna a C++ Academy