C++ Academy · Lektion

Forespørgsler på typer

Undersøg typer ved kompilering

Lektion 1 af 413 trin

Forespørgsler på typer 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.

Hvad er typeegenskaber?

Headerfilen <type_traits> lader dig stille spørgsmål om typer ved kompilering. Hver typeegenskab er en skabelon, der eksponerer en konstant ::value eller en medlemstype.

is_integral

std::is_integral<T>::value er sand for heltalstyper som int og char, og falsk ellers.

#include <iostream>
#include <type_traits>

int main() {
    std::cout << std::is_integral<int>::value << "\n";
    std::cout << std::is_integral<double>::value << "\n";
    return 0;
}

Genvejen _v

C++17 tilføjede variabelskabeloner med _v, så du kan skrive std::is_integral_v<T> i stedet for ::value.

#include <iostream>
#include <type_traits>

int main() {
    std::cout << std::is_integral_v<long> << "\n";
    std::cout << std::is_floating_point_v<float> << "\n";
    return 0;
}

Egenskaber for typekategorier

Mange typeegenskaber klassificerer typer.

  • is_pointer
  • is_reference
  • is_array
  • is_class
  • is_enum
#include <iostream>
#include <type_traits>

struct S {};

int main() {
    std::cout << std::is_pointer_v<int*> << "\n";
    std::cout << std::is_class_v<S> << "\n";
    std::cout << std::is_reference_v<int&> << "\n";
    return 0;
}

Relationsegenskaber

Nogle typeegenskaber sammenligner to typer.

  • is_same<A,B>
  • is_base_of<Base,Derived>
  • is_convertible<From,To>
#include <iostream>
#include <type_traits>

struct Base {};
struct Derived : Base {};

int main() {
    std::cout << std::is_same_v<int, int> << "\n";
    std::cout << std::is_base_of_v<Base, Derived> << "\n";
    return 0;
}

Egenskaber ved typer

Typeegenskaber for egenskaber og muligheder rapporterer kvalifikatorer og funktioner.

  • is_const
  • is_signed
  • is_trivially_copyable
  • is_default_constructible
#include <iostream>
#include <type_traits>

int main() {
    std::cout << std::is_const_v<const int> << "\n";
    std::cout << std::is_signed_v<unsigned> << "\n";
    return 0;
}

Brug af typeegenskaber i static_assert

Typeegenskaber fungerer perfekt sammen med static_assert til at håndhæve krav ved kompilering.

#include <type_traits>
#include <iostream>

template <typename T>
T add(T a, T b) {
    static_assert(std::is_arithmetic_v<T>, "T must be a number");
    return a + b;
}

int main() {
    std::cout << add(2, 3) << "\n";
    return 0;
}

Sådan fungerer typeegenskaber

En typeegenskab er blot en struct-skabelon. Den generelle skabelon nedarver fra false_type; en specialisering for den matchende type nedarver fra true_type. Kompilatoren vælger det bedste match.

integral_constant

Alle boolske typeegenskaber nedarver fra std::integral_constant. true_type og false_type er blot aliaser for den med value sat til sand eller falsk.

#include <iostream>
#include <type_traits>

int main() {
    std::cout << std::true_type::value << "\n";
    std::cout << std::false_type::value << "\n";
    return 0;
}

Forespørgsler inde i skabeloner

Typeegenskaber lader skabeloner forgrene sig ud fra den type, de modtager, så generisk kode kan tilpasse sig forskelligt til int, float, peger- eller klassetypen.

Kun ved kompilering

Forespørgsler på typeegenskaber koster intet under kørsel; de evalueres under kompileringen. Resultatet indbygges i den genererede kode.

Hurtig kontrol

Husk den praktiske syntaks fra C++17.

Opsummering

Du har lært at forespørge om typer.

  • <type_traits> besvarer spørgsmål ved kompilering
  • ::value eller genvejen _v returnerer en boolsk værdi
  • Typeegenskaber for kategorier, relationer og egenskaber
  • Kombinér dem med static_assert for at håndhæve begrænsninger
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 “Forespørgsler på typer” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Forespørgsler på typer”, 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 “Forespørgsler på typer”?

Undersøg typer ved kompilering 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 “Forespørgsler på typer”?

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. Forespørgsler på typer
  2. Transformation af typer
  3. Betinget logik
  4. Skriv egne traits
← Tilbage til C++ Academy