<type_traits>

Definiuje szablony dla stałych czasu kompilacji, które dają informacje o właściwościach ich argumentów typu lub tworzą przekształcone typy.

Składnia

#include <type_traits>

Uwagi

Klasy i szablony w <type_traits> są używane do obsługi wnioskowania, klasyfikacji i przekształcania typów w czasie kompilacji. Są one również używane do wykrywania błędów związanych z typem i ułatwienia optymalizacji kodu ogólnego. Jednoargumentowe cechy typu opisują właściwość typu, cechy typów binarnych opisują relację między typami, a cechy przekształcania modyfikują właściwość typu.

Klasa integral_constant pomocnika i jego specjalizacje true_type szablonów oraz false_type tworzą klasy bazowe dla predykatów typów. Predykat typu to szablon, który przyjmuje co najmniej jeden argument typu. Gdy predykat typu ma wartość true, jest publicznie uzyskiwany bezpośrednio lub pośrednio z true_type. Gdy predykat typu przechowuje wartość false, jest publicznie uzyskiwany bezpośrednio lub pośrednio z false_type.

Modyfikator typu lub cecha przekształcania to szablon, który przyjmuje co najmniej jeden argument szablonu i ma jeden element członkowski , typektóry jest synonimem zmodyfikowanego typu.

Szablony aliasów

Aby uprościć wyrażenia cech typów, udostępniane są szablony aliasówtypename some_trait<T>::type, w których some_trait jest nazwą szablonu klasy. Na przykład add_const ma szablon aliasu dla jego typu , add_const_tzdefiniowany jako:

template <class T>
using add_const_t = typename add_const<T>::type;

Są to podane aliasy dla type członków:

add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t\

common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t\

remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t\

Klasy

Klasy i definicje typów pomocnika

Nazwa/nazwisko opis
integral_constant Sprawia, że stała całkowita z typu i wartości.
true_type Przechowuje stałą całkowitą z wartością true.
false_type Przechowuje stałą całkowitą z wartością false.

Kategorie typów podstawowych

Nazwa/nazwisko opis
is_void Sprawdza, czy typ to void.
is_null_pointer Sprawdza, czy typ to std::nullptr_t.
is_integral Sprawdza, czy typ jest całkowity.
is_floating_point Sprawdza, czy typ jest zmiennoprzecinkowa.
is_array Sprawdza, czy typ jest tablicą.
is_pointer Sprawdza, czy typ jest wskaźnikiem.
is_lvalue_reference Sprawdza, czy typ jest odwołaniem lvalue.
is_rvalue_reference Sprawdza, czy typ jest odwołaniem rvalue.
is_member_object_pointer Sprawdza, czy typ jest wskaźnikiem do obiektu członkowskiego.
is_member_function_pointer Sprawdza, czy typ jest wskaźnikiem do funkcji składowej.
is_enum Sprawdza, czy typ jest wyliczeniem.
is_union Sprawdza, czy typ jest unią.
is_class Sprawdza, czy typ jest klasą.
is_function Sprawdza, czy typ jest typem funkcji.

Kategorie typów złożonych

Nazwa/nazwisko opis
is_reference Sprawdza, czy typ jest odwołaniem.
is_arithmetic Sprawdza, czy typ jest arytmetyczny.
is_fundamental Sprawdza, czy typ jest void , czy arytmetyczny.
is_object Sprawdza, czy typ jest typem obiektu.
is_scalar Sprawdza, czy typ jest skalarny.
is_compound Sprawdza, czy typ nie jest skalarny.
is_member_pointer Sprawdza, czy typ jest wskaźnikiem do elementu członkowskiego.

Właściwości typu

Nazwa/nazwisko opis
is_const Sprawdza, czy typ to const.
is_volatile Sprawdza, czy typ to volatile.
is_trivial Sprawdza, czy typ jest trywialny.
is_trivially_copyable Sprawdza, czy typ jest trywialnie kopiowalny.
is_standard_layout Sprawdza, czy typ jest standardowym typem układu.
is_pod Sprawdza, czy typ jest zasobnikiem.
is_literal_type Sprawdza, czy typ może być zmienną constexpr , czy używany w constexpr funkcji.
is_empty Sprawdza, czy typ jest pustą klasą.
is_polymorphic Sprawdza, czy typ jest klasą polimorficzną.
is_abstract Sprawdza, czy typ jest klasą abstrakcyjną.
is_final Sprawdza, czy typ jest typem klasy oznaczonym .final
is_aggregate
Is_signed Sprawdza, czy typ jest podpisaną liczbą całkowitą.
is_unsigned Sprawdza, czy typ jest niepodpisaną liczbą całkowitą.
is_constructible Sprawdza, czy typ jest skonstruowany przy użyciu określonych typów argumentów.
is_default_constructible Sprawdza, czy typ ma konstruktor domyślny.
is_copy_constructible Sprawdza, czy typ ma konstruktor kopiujący.
is_move_constructible Sprawdza, czy typ ma konstruktor przenoszenia.
is_assignable Sprawdza, czy pierwszy typ może mieć przypisaną wartość drugiego typu.
is_copy_assignable Sprawdza, czy typ może mieć przypisaną wartość odwołania const typu.
is_move_assignable Sprawdza, czy typ może być przypisany do odwołania rvalue typu.
is_swappable
is_swappable_with
is_destructible Sprawdza, czy typ jest niezniszczalny.
is_trivially_constructible Sprawdza, czy typ nie używa operacji innych niż trywialne podczas konstruowania przy użyciu określonych typów.
is_trivially_default_constructible Sprawdza, czy typ nie używa operacji nietrywialnych podczas konstruowania domyślnego.
is_trivially_copy_constructible Sprawdza, czy typ nie używa operacji nietrywialnych podczas tworzenia kopii.
is_trivially_move_constructible Sprawdza, czy typ nie używa operacji nietrywialnych podczas konstruowania przenoszenia.
is_trivially_assignable Sprawdza, czy typy są przypisywane, a przypisanie nie używa operacji innych niż trywialne.
is_trivially_copy_assignable Sprawdza, czy typ jest przypisywany do kopiowania, a przypisanie nie używa operacji innych niż trywialne.
is_trivially_move_assignable Sprawdza, czy typ jest przypisywany, a przypisanie nie używa operacji innych niż trywialne.
is_trivially_destructible Sprawdza, czy typ jest destrukcyjny, a destruktor nie używa operacji innych niż trywialne.
is_nothrow_constructible Sprawdza, czy typ jest skonstruowany i czy nie jest zgłaszany podczas konstruowania przy użyciu określonych typów.
is_nothrow_default_constructible Sprawdza, czy typ jest domyślnie skonstruowany i jest znany, aby nie zgłaszać podczas konstruowania domyślnego.
is_nothrow_copy_constructible Sprawdza, czy typ jest kopiowalny, a konstruktor kopiowania nie jest zgłaszany.
is_nothrow_move_constructible Sprawdza, czy typ jest konstruowalny, a konstruktor przenoszenia nie jest zgłaszany.
is_nothrow_assignable Sprawdza, czy typ można przypisać przy użyciu określonego typu, a przypisanie nie jest zgłaszane.
is_nothrow_copy_assignable Sprawdza, czy typ jest przypisywany do kopiowania, a przypisanie jest znane, aby nie zgłaszać.
is_nothrow_move_assignable Sprawdza, czy typ jest przypisywany, a przypisanie jest znane, aby nie zgłaszać.
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible Sprawdza, czy typ jest destruktorem, a destruktor nie jest zgłaszany.
has_virtual_destructor Sprawdza, czy typ ma destruktor wirtualny.
has_unique_object_representations
is_invocable Sprawdza, czy można wywołać typ wywoływany przy użyciu określonych typów argumentów.
Dodano w języku C++17.
is_invocable_r Sprawdza, czy można wywołać typ wywoływany przy użyciu określonych typów argumentów, a wynik jest konwertowany na określony typ.
Dodano w języku C++17.
is_nothrow_invocable Sprawdza, czy można wywołać typ wywoływany przy użyciu określonych typów argumentów i nie jest znany z zgłaszania wyjątków.
Dodano w języku C++17.
is_nothrow_invocable_r Sprawdza, czy można wywołać typ wywołujący przy użyciu określonych typów argumentów i jest znany, aby nie zgłaszać wyjątków, a wynik jest konwertowany na określony typ.
Dodano w języku C++17.

Zapytania dotyczące właściwości typu

Nazwa/nazwisko opis
alignment_of Pobiera wyrównanie typu.
Rank Pobiera liczbę wymiarów tablicy.
Zakresie Pobiera liczbę elementów w określonym wymiarze tablicy.

Relacje typów

Nazwa/nazwisko opis
is_same Sprawdza, czy dwa typy są takie same.
is_base_of Sprawdza, czy jeden typ jest podstawą innego.
is_convertible Sprawdza, czy jeden typ jest konwertowany na inny.

Modyfikacje const-volatile

Nazwa/nazwisko opis
add_const const Tworzy typ z typu.
add_volatile volatile Tworzy typ z typu.
add_cv const volatile Tworzy typ z typu.
remove_const Tworzy typ inny niż const z typu.
remove_volatile Tworzy typ nietrwały z typu.
remove_cv Tworzy typ nietrwały nietrwały z typu.

Modyfikacje odwołań

Nazwa/nazwisko opis
add_lvalue_reference Tworzy odwołanie do typu z typu.
add_rvalue_reference Tworzy odwołanie rvalue do typu z typu
remove_reference Tworzy typ inny niż odwołanie z typu.

Podpisywanie modyfikacji

Nazwa/nazwisko opis
make_signed Tworzy typ, jeśli jest podpisany, lub najmniejszy typ ze znakiem większym lub równym typowi.
make_unsigned Tworzy typ, jeśli niepodpisany lub najmniejszy niepodpisany typ większy lub równy typowi.

Modyfikacje tablicy

Nazwa/nazwisko opis
remove_all_extents Tworzy typ inny niż tablica z typu tablicy.
remove_extent Tworzy typ elementu z typu tablicy.

Modyfikacje wskaźnika

Nazwa/nazwisko opis
add_pointer Tworzy wskaźnik do typu z typu.
remove_pointer Tworzy typ z wskaźnika do typu.

Inne przekształcenia

Nazwa/nazwisko opis
aligned_storage Przydziela niezainicjowaną pamięć dla wyrównanego typu.
aligned_union Przydziela niezainicjowaną pamięć dla wyrównanej unii z nietrygalnym konstruktorem lub destruktorem.
common_type Tworzy wspólny typ wszystkich typów pakietu parametrów.
Warunkowe Jeśli warunek ma wartość true, tworzy pierwszy określony typ, w przeciwnym razie drugi określony typ.
Rozpadu Tworzy typ przekazywany przez wartość. Tworzy typ nieprzywoływały, nietrwały lub nietrwały albo wprowadza wskaźnik do typu.
enable_if Jeśli warunek ma wartość true, generuje określony typ, w przeciwnym razie nie ma typu.
invoke_result Określa typ zwracany typu wywoływanego, który przyjmuje określone typy argumentów.
Dodano w języku C++17.
result_of Określa typ zwracany typu wywoływanego, który przyjmuje określone typy argumentów.
Dodano w języku C++14 przestarzałym w języku C++17.
underlying_type Tworzy podstawowy typ całkowity dla typu wyliczenia.

Cechy operatorów logicznych

Nazwa/nazwisko opis
Połączeniu
rozłączenie
Negacji

Zobacz też

<Funkcjonalne>