Sprawdzanie typów
Analizuj typy w czasie kompilacji
Sprawdzanie typów to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Czym są cechy typów?
Nagłówek <type_traits> pozwala zadawać pytania dotyczące typów w czasie kompilacji. Każda cecha jest szablonem udostępniającym stałą ::value lub typ składowy.
is_integral
std::is_integral<T>::value ma wartość true dla typów całkowitych, takich jak int i char, a w przeciwnym razie false.
#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;
}Skrót _v
W C++17 dodano szablony zmiennych _v, dzięki którym można zapisać std::is_integral_v<T> zamiast ::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;
}Cechy klasyfikujące
Wiele cech służy do klasyfikowania typów.
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;
}Cechy relacji
Niektóre cechy porównują dwa typy.
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;
}Cechy właściwości
Cechy właściwości informują o kwalifikatorach i możliwościach typów.
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;
}Używanie cech w static_assert
Cechy doskonale współpracują z static_assert, umożliwiając wymuszanie wymagań w czasie kompilacji.
#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;
}Jak działają cechy
Cecha jest po prostu szablonem struktury. Szablon ogólny dziedziczy po false_type, a specjalizacja dla pasującego typu dziedziczy po true_type. Kompilator wybiera najlepsze dopasowanie.
integral_constant
Wszystkie cechy logiczne pochodzą od std::integral_constant. true_type i false_type to po prostu aliasy tego typu z wartością value odpowiednio true lub false.
#include <iostream>
#include <type_traits>
int main() {
std::cout << std::true_type::value << "\n";
std::cout << std::false_type::value << "\n";
return 0;
}Odpytywanie wewnątrz szablonów
Cechy pozwalają szablonom rozgałęziać działanie na podstawie rodzaju otrzymanego typu, dzięki czemu kod ogólny może odmiennie obsługiwać typy int, float, wskaźnikowe i klasowe.
Tylko w czasie kompilacji
Odpytywanie cech nic nie kosztuje w czasie wykonania — odbywa się podczas kompilacji. Wynik zostaje zapisany w wygenerowanym kodzie.
Szybkie sprawdzenie
Proszę przypomnieć sobie wygodną składnię wprowadzoną w C++17.
Podsumowanie
Nauczyli się Państwo odpytywać typy.
<type_traits>odpowiada na pytania w czasie kompilacji::valuelub skrót_vzwraca wartość bool- Cechy klasyfikujące, relacji i właściwości
- Można łączyć je z
static_assert, aby wymuszać ograniczenia
Często zadawane pytania
Czy lekcja „Sprawdzanie typów” jest bezpłatna?
Tak — pełny tekst „Sprawdzanie typów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Sprawdzanie typów”?
Analizuj typy w czasie kompilacji Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Sprawdzanie typów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Sprawdzanie typów
- Przekształcanie typów
- Logika warunkowa
- Pisanie własnych traits