C++ Academy · Lektion

auto, decltype og typeudledning

Lad compileren udlede typer med auto og decltype for mere overskuelig kode

Lektion 1 af 413 trin

auto, decltype og typeudledning er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 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.

Typeudledning i moderne C++

Siden C++11 kan compileren udlede typer mange steder. Det gør koden kortere og mindre fejlbehæftet — når det bruges med omtanke.

Nøgleordet auto

auto udleder typen fra initialiseringsudtrykket ved kompilering. Variablen har stadig en fast, statisk kendt type.

auto i = 42;          // int
auto d = 3.14;        // double
auto s = "hello";     // const char*
auto v = std::vector<int>{1,2,3};   // std::vector<int>

auto og const

Som standard fjerner auto const på øverste niveau og referencer. Tilføj dem eksplicit, når du har brug for dem.

const int n = 10;
auto a = n;            // int (const dropped)
const auto& b = n;     // const int&

auto med iteratorer

Typenavne for iteratorer er lange. auto er særligt nyttigt her.

std::map<std::string, int> ages = {{"Ada", 30}};
auto it = ages.find("Ada");
// vs std::map<std::string,int>::iterator it = ...

Områdebaseret for og auto

Brug auto& til at gennemløbe uden at kopiere.

for (const auto& [name, age] : ages) {
    std::cout << name << ": " << age << "\n";
}

Efterstillede returtyper

Funktioner kan bruge auto som pladsholder for returtypen med en efterstillet pil, der angiver typen — praktisk til skabeloner.

auto add(int a, int b) -> int {
    return a + b;
}

Udledning af returtype i C++14

C++14 tillader almindelige returtyper med auto — compileren udleder typen fra retursætningen.

auto multiply(double x, double y) {
    return x * y;       // deduced as double
}

decltype: Hent typen for et udtryk

decltype(expr) giver typen for expr ved kompilering. I modsætning til auto bevarer det referencer og const.

int x = 0;
int& r = x;
decltype(r) ref = x;  // int&
decltype(x) val = 0;  // int

decltype(auto)

Kombinerer typeudledning med reglerne for decltype og bevarer den nøjagtige udtrykstype, inklusive værdikategorien.

auto         a = some_func();   // copy
decltype(auto) b = some_func();  // exact type, including references

Hvornår du bør undgå auto

Undgå auto, når den udledte type ikke er indlysende – for eksempel ved store numeriske litteraler, blandede beregninger eller platformafhængige størrelser. Vær eksplicit af hensyn til læsbarheden.

Stil med næsten altid auto

Nogle stilguider anbefaler auto for alle variable for at undgå skjulte konverteringer. Andre foretrækker eksplicitte typer. Vælg en konvention, og anvend den konsekvent.

Hurtigt tjek

Hvad er forskellen på auto og decltype(auto), når du returnerer en reference?

Opsummering

auto udleder typer fra initialisatorer; decltype angiver typen af et udtryk; decltype(auto) udleder typen, samtidig med at referencer bevares. Brug dem til at fjerne støj, men sørg for, at koden stadig er læsbar.

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 “auto, decltype og typeudledning” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “auto, decltype og typeudledning”, 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 “auto, decltype og typeudledning”?

Lad compileren udlede typer med auto og decltype for mere overskuelig kode 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 1 af 4.

Hvor lang tid tager lektionen “auto, decltype og typeudledning”?

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