Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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. |
| 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 |