<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 , type
któ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_t
zdefiniowany 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. |
ranga | Pobiera liczbę wymiarów tablicy. |
rozciągłość | 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. |
warunkowy | Jeśli warunek ma wartość true, tworzy pierwszy określony typ, w przeciwnym razie drugi określony typ. |
gnicie | 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 |
---|---|
koniunkcja | |
alternatywa | |
negacja |