Range-baseret for, nullptr og enum class
Brug C++11's praktiske funktioner: range-baseret for, nullptr og stærkt typede enum'er
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 scopeenum 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 conversionAngivelse 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.
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
- auto, decltype og typeudledning
- Range-baseret for, nullptr og enum class
- Lambdaudtryk: capture, mutable, generiske parametre
- Strukturerede bindinger og if-init i C++17