<type_traits>
Definiert Vorlagen für Kompilierungszeitkonstanten, die Informationen zu den Eigenschaften ihrer Typargumente liefern oder transformierte Typen erzeugen.
Syntax
#include <type_traits>
Hinweise
Die Klassen und Vorlagen in <type_traits> werden verwendet, um die Typableitung, Klassifizierung und Transformation zur Kompilierungszeit zu unterstützen. Sie werden auch verwendet, um Typfehler zu erkennen und Ihnen bei der Optimierung des generischen Codes zu helfen. Unäre Typeigenschaften beschreiben eine Eigenschaft eines Typs, binäre Typeigenschaften beschreiben eine Beziehung zwischen Typen und Transformationseigenschaften ändern eine Eigenschaft eines Typs.
Die Hilfsklasse integral_constant
und die Vorlagenspezialisierungen true_type
und false_type
bilden die Basisklassen für Typprädikate. Ein Typprädikat ist eine Vorlage, die ein oder mehrere Typargumente entgegennimmt. Wenn ein Typprädikat "true" enthält, wird es öffentlich direkt oder indirekt von true_type abgeleitet. Wenn ein Typprädikat "false" enthält, wird es öffentlich direkt oder indirekt von false_type abgeleitet.
Ein Typmodifizierer oder Transformationsmerkmal ist eine Vorlage, die ein oder mehrere Vorlagenargumente entgegennimmt und über einen Member type
verfügt, der ein Synonym für den geänderten Typ ist.
Alias-Vorlagen
Um Typeneigenschaftenausdrücke zu vereinfachen, werden Aliasvorlagen bereitgestellt typename some_trait<T>::type
, bei denen some_trait der Name der Klassenvorlage ist. Zum Beispiel verfügt add_const über eine Aliasvorlage für seinen Typ add_const_t
, definiert als:
template <class T>
using add_const_t = typename add_const<T>::type;
Dies sind die bereitgestellten Aliase für die type
Mitglieder:
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
\
Klassen
Hilfsprogrammklasse und Typedefs
Name | Beschreibung |
---|---|
integral_constant | Wandelt einen Typ und einen Wert in eine Ganzzahlkonstante um. |
true_type | Enthält eine Ganzzahlkonstante mit einem wahren Wert. |
false_type | Enthält eine Ganzzahlkonstante mit einem falschen Wert. |
Primäre Typkategorien
Name | Beschreibung |
---|---|
is_void | Testet, ob der Typ void ist. |
is_null_pointer | Testet, ob der Typ std::nullptr_t ist. |
is_integral | Testet, ob der Typ eine Ganzzahl ist. |
is_floating_point | Testet, ob der Typ ein Gleitkomma ist. |
is_array | Testet, ob der Typ ein Array ist. |
is_pointer | Testet, ob der Typ ein Zeiger ist. |
is_lvalue_reference | Testet, ob es sich beim Typ um einen lvalue-Verweis handelt. |
is_rvalue_reference | Testet, ob es sich beim Typ um einen „rvalue“-Verweis handelt. |
is_member_object_pointer | Testet, ob der Typ ein Zeiger auf ein Memberobjekt ist. |
is_member_function_pointer | Testet, ob der Typ ein Zeiger auf eine Memberfunktion ist. |
is_enum | Testet, ob der Typ eine Aufzählung ist. |
is_union | Testet, ob der Typ eine Union ist. |
is_class | Testet, ob der Typ eine Klasse ist. |
is_function | Testet, ob der Typ ein Funktionstyp ist. |
Zusammengesetzte Typkategorien
Name | Beschreibung |
---|---|
is_reference | Testet, ob der Typ ein Verweis ist. |
is_arithmetic | Testet, ob der Typ arithmetisch ist. |
is_fundamental | Testet, ob der Typ void oder arithmetisch ist. |
is_object | Testet, ob der Typ ein Objekttyp ist. |
is_scalar | Testet, ob der Typ skalar ist. |
is_compound | Testet, ob der Typ nicht skalar ist. |
is_member_pointer | Testet, ob der Typ ein Zeiger auf ein Member ist. |
Typeigenschaften
Name | Beschreibung |
---|---|
is_const | Testet, ob der Typ const ist. |
is_volatile | Testet, ob der Typ volatile ist. |
is_trivial | Testet, ob der Typ trivial ist. |
is_trivially_copyable | Testet, ob der Typ trivial kopierbar ist. |
is_standard_layout | Testet, ob der Typ ein Standardlayouttyp ist. |
is_pod | Testet, ob der Typ ein POD-Typ ist. |
is_literal_type | Testet, ob der Typ eine constexpr -Variable sein oder in einer constexpr -Funktion verwendet werden kann. |
is_empty | Testet, ob es sich bei dem Typ um eine leere Klasse handelt. |
is_polymorphic | Testet, ob der Typ eine polymorphe Klasse ist. |
is_abstract | Testet, ob es dich bei dem Typ um eine abstrakte Klasse handelt. |
is_final | Testet, ob der Typ ein als final markierter Klassentyp ist. |
is_aggregate | |
is_signed | Testet, ob der Typ eine Ganzzahl mit einem Vorzeichen ist. |
is_unsigned | Testet, ob der Typ eine Ganzzahl ohne Vorzeichen ist. |
is_constructible | Testet, ob der Typ konstruiert werden kann, wenn die angegebenen Argumenttypen verwendet werden. |
is_default_constructible | Testet, ob der Typ über einen Standardkonstruktor verfügt. |
is_copy_constructible | Testet, ob der Typ über einen Kopierkonstruktor verfügt. |
is_move_constructible | Testet, ob der Typ einen Bewegungskonstruktor aufweist. |
is_assignable | Testet, ob dem ersten Typ ein Wert des zweiten Typs zugewiesen werden kann. |
is_copy_assignable | Testet, ob einem Typ ein konstanter Verweiswert des Typs zugewiesen werden kann. |
is_move_assignable | Testet, ob einem Typ ein rvalue-Verweis des Typs zugewiesen werden kann. |
is_swappable | |
is_swappable_with | |
is_destructible | Testet, ob der Typ „destructible“ ist. |
is_trivially_constructible | Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er mit den angegebenen Typen konstruiert wird. |
is_trivially_default_constructible | Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er standardmäßig konstruiert wird. |
is_trivially_copy_constructible | Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er durch Kopie konstruiert wird. |
is_trivially_move_constructible | Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er durch Bewegung konstruiert wird. |
is_trivially_assignable | Testet, ob die Typen zugewiesen werden können und bei der Zuweisung keine nicht trivialen Vorgänge verwendet werden. |
is_trivially_copy_assignable | Testet, ob der Typ durch Kopie zugewiesen werden kann und bei der Zuweisung keine nicht trivialen Vorgänge verwendet werden. |
is_trivially_move_assignable | Prüft, ob dem Typ eine Verschiebung zugewiesen werden kann und bei der Zuweisung keine nicht trivialen Vorgänge verwendet werden. |
is_trivially_destructible | Testet, ob der Typ zerstörbar ist und der Destruktor keine nicht trivialen Vorgänge verwendet. |
is_nothrow_constructible | Testet, ob der Typ konstruiert werden kann und keine Ausnahmefehler auslöst, wenn er mit den angegebenen Typen konstruiert wird. |
is_nothrow_default_constructible | Testet, ob der Typ standardmäßig konstruiert werden kann und keine Ausnahmefehler auslöst, wenn er standardmäßig konstruiert wird. |
is_nothrow_copy_constructible | Testet, ob der Typ durch Kopie konstruiert werden kann und der Kopierkonstruktor keine Ausnahmefehler auslöst. |
is_nothrow_move_constructible | Testet, ob der Typ durch Bewegung konstruiert werden kann und der Bewegungskonstruktor keine Ausnahmefehler auslöst. |
is_nothrow_assignable | Testet, ob der Typ mit dem angegebenen Typ zugewiesen werden kann und die Zuweisung keine Ausnahmefehler auslöst. |
is_nothrow_copy_assignable | Testet, ob der Typ durch Kopie zugewiesen werden kann und die Zuweisung keine Ausnahmefehler auslöst. |
is_nothrow_move_assignable | Prüft, ob dem Typ eine Verschiebung zugewiesen werden kann und die Zuweisung keine Ausnahmefehler auslöst. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Testet, ob der Typ zerstörbar ist und der Destruktor keine Ausnahmefehler auslöst. |
has_virtual_destructor |
Testet, ob der Typ einen virtuellen Destruktor aufweist. |
has_unique_object_representations |
|
is_invocable | Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann. In C++17 hinzugefügt. |
is_invocable_r | Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann und das Ergebnis in den angegebenen Typ konvertierbar ist. In C++17 hinzugefügt. |
is_nothrow_invocable | Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann und dass keine Ausnahmen ausgelöst werden. In C++17 hinzugefügt. |
is_nothrow_invocable_r | Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann und dass keine Ausnahmen ausgelöst werden, und das Ergebnis wird in den angegebenen Typ umsetzbar. In C++17 hinzugefügt. |
Typeigenschaftsabfragen
Name | Beschreibung |
---|---|
alignment_of | Ruft die Ausrichtung eines Typs ab. |
rank | Ruft die Anzahl von Arraydimensionen ab. |
extent | Ruft die Anzahl der Elemente in der angegebenen Arraydimension ab. |
Typbeziehungen
Name | Beschreibung |
---|---|
is_same | Stellt fest, ob zwei Typen identisch sind. |
is_base_of | Testet, ob ein Typ die Basis eines anderen ist. |
is_convertible | Testet, ob ein Typ in einen anderen konvertiert werden kann. |
Änderungen flüchtiger Konstanten
Name | Beschreibung |
---|---|
add_const | Wandelt den Typ in einen const -Typ um. |
add_volatile | Wandelt den Typ in einen volatile -Typ um. |
add_cv | Wandelt den Typ in einen const volatile -Typ um. |
remove_const | Wandelt den Typ in einen nicht konstanten Typ um. |
remove_volatile | Wandelt den Typ in einen nicht flüchtigen Typ um. |
remove_cv | Wandelt den Typ in einen nicht konstanten nicht flüchtigen Typ um. |
Verweisänderungen
Name | Beschreibung |
---|---|
add_lvalue_reference | Wandelt den Typ in einen Verweis auf den Typ um. |
add_rvalue_reference | Wandelt den Typ in einen rvalue-Verweis auf den Typ um |
remove_reference | Wandelt den Typ in einen Typ ohne Verweis um. |
Vorzeichenmanipulation
Name | Beschreibung |
---|---|
make_signed | Erzeugt bei einem signierten Typ den Typ und andernfalls den kleinsten signierten Typ größer oder gleich dem Typ. |
make_unsigned | Erzeugt bei einem unsignierten Typ den Typ und andernfalls den kleinsten unsignierten Typ größer oder gleich dem Typ. |
Arrayänderungen
Name | Beschreibung |
---|---|
remove_all_extents | Wandelt einen Arraytyp in einen Nichtarraytyp um. |
remove_extent | Wandelt einen Arraytyp in einen Elementtyp um. |
Zeigeränderungen
Name | Beschreibung |
---|---|
add_pointer | Wandelt den Typ in einen Zeiger auf den Typ um. |
remove_pointer | Wandelt einen Zeiger auf den Typ in einen Typ um. |
Weitere Transformationen
Name | Beschreibung |
---|---|
aligned_storage | Weist nicht initialisierten Arbeitsspeicher für eine ausgerichteten Typ zu. |
aligned_union | Weist den nicht initialisierten Arbeitsspeicher für eine ausgerichtete Union mit einem nicht trivialen Konstruktor oder Destruktor zu. |
common_type | Wandelt alle Typen des Parameterpakets in einen gemeinsamen Typ um. |
conditional | Wenn die Bedingung TRUE ist, wird der erste angegebene Typ erzeugt, andernfalls der zweite angegebene Typ. |
decay | Erzeugt den Typ bei der Übergabe durch einen Wert. Erstellt einen non-reference-, non-const- oder non-volatile-Typ oder erstellt einen Zeiger auf den Typ. |
enable_if | Wenn die Bedingung TRUE ist, wird der angegebene Typ erzeugt, andernfalls kein Typ. |
invoke_result | Bestimmt den Rückgabetyp des aufrufbaren Typs, der die angegebenen Argumenttypen akzeptiert. In C++17 hinzugefügt. |
result_of | Bestimmt den Rückgabetyp des aufrufbaren Typs, der die angegebenen Argumenttypen akzeptiert. In C++14 wurde in C++17 veraltet. |
underlying_type | Erzeugt für einen Enumerationstyp den zugrunde liegenden ganzzahligen Typ. |
Logische Operatoreigenschaften
Name | Beschreibung |
---|---|
Konjunktion | |
Disjunktion | |
Negation |