C++ Academy · Lektion

Range-baseret for, nullptr og enum class

Brug C++11's praktiske funktioner: range-baseret for, nullptr og stærkt typede enum'er

Lektion 2 af 413 trin

Range-baseret for, nullptr og enum class er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Tre hurtige gevinster i C++11

C++11 introducerede mange små forbedringer. Tre, du vil bruge hver dag, er range-based for, nullptr og enum class.

Opsummering af range-baserede for-løkker

Gennemløb enhver container, der har begin() og end(), uden indeksberegning.

for (const auto& x : v) {
    process(x);
}

Hvad det erstatter

Den omstændelige iteratorbaserede løkke bliver til én linje.

// Before C++11
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
    process(*it);
}

nullptr slår NULL

nullptr er en typet nullpointerlitteral. Den undgår tvetydighed ved overload-opløsning for NULL, som er en makro for 0.

void f(int);
void f(int*);

f(NULL);      // calls f(int)
f(nullptr);   // calls f(int*)

Hvorfor nullptr vinder

Brug nullptr konsekvent:

  • Særskilt type (std::nullptr_t)
  • Tydeligere hensigt
  • Fungerer i skabelonmetaprogrammering
  • Kan ikke ved et uheld konverteres til int

Almindelig enum: en faldgrube

Enum'er i gammel stil lækker deres navne ud i det omgivende gyldighedsområde og konverteres implicit til int.

enum Color { RED, GREEN, BLUE };
int c = RED;            // implicit conversion, no warning
// RED, GREEN, BLUE leak into global scope

enum class: afgrænset og typestærk

C++11 enum class kræver kvalificering og forbyder implicit konvertering til int.

enum class Color { Red, Green, Blue };
Color c = Color::Red;
// int n = Color::Red;     // ERROR
std::cout << static_cast<int>(c);   // explicit conversion

Angivelse af den underliggende type

Du kan fastlåse lagringsstørrelsen for en enum class til en bestemt heltalstype.

enum class Status : uint8_t { OK = 0, FAIL = 1, RETRY = 2 };

Fremaddeklarering af enum class

Fordi den underliggende type er kendt, kan enum classes fremaddeklareres – det er praktisk, når headerinkluderinger skal brydes op.

// header A
enum class Color : int;

// header B (full definition)
enum class Color : int { Red, Green, Blue };

Hvornår en almindelig enum er i orden

Almindelige enum'er har stadig deres anvendelser: heltalsbitmasker til flag, hvor du virkelig ønsker implicit konvertering. Dokumentér designbeslutningen tydeligt.

Tip til migrering

Når du moderniserer en kodebase, skal du gradvist konvertere almindelige enum'er til enum class. Søg efter steder, der er afhængige af implicit konvertering til int, og tilføj static_cast.

Hurtigt tjek

Hvad gør enum class mere sikkert end en almindelig enum?

Opsummering

Tre hurtige gevinster i C++11: range-baserede for-løkker fjerner iteratorstandardkode, nullptr erstatter NULL, og enum class giver afgrænsede enum'er med typesikkerhed. Brug som udgangspunkt alle tre.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Range-baseret for, nullptr og enum class” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Range-baseret for, nullptr og enum class”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Range-baseret for, nullptr og enum class”?

Brug C++11's praktiske funktioner: range-baseret for, nullptr og stærkt typede enum'er Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Range-baseret for, nullptr og enum class”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. auto, decltype og typeudledning
  2. Range-baseret for, nullptr og enum class
  3. Lambdaudtryk: capture, mutable, generiske parametre
  4. Strukturerede bindinger og if-init i C++17
← Tilbage til C++ Academy