Forespørgsler på typer
Undersøg typer ved kompilering
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_pointeris_referenceis_arrayis_classis_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_constis_signedis_trivially_copyableis_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::valueeller genvejen_vreturnerer en boolsk værdi- Typeegenskaber for kategorier, relationer og egenskaber
- Kombinér dem med
static_assertfor at håndhæve begrænsninger
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
- Forespørgsler på typer
- Transformation af typer
- Betinget logik
- Skriv egne traits