0Pricing
C++ Academy · Lekcja

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_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;
}

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_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;
}

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
  • ::value lub skrót _v zwraca 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

  1. Sprawdzanie typów
  2. Przekształcanie typów
  3. Logika warunkowa
  4. Pisanie własnych traits
← Powrót do C++ Academy