Namespaces
Variants

std:: is_scalar

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
(C++11)
is_scalar
(C++11)
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Definiert im Header <type_traits>
template < class T >
struct is_scalar ;
(seit C++11)

std::is_scalar ist ein UnaryTypeTrait .

Falls T ein Skalartyp ist, liefert die Konstante value den Wert true . Für jeden anderen Typ ist value false .

Wenn das Programm Spezialisierungen für std::is_scalar oder std::is_scalar_v hinzufügt, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Template-Parameter

T - ein zu prüfender Typ

Hilfsvariablen-Template

template < class T >
constexpr bool is_scalar_v = is_scalar < T > :: value ;
(seit C++17)

Geerbt von std:: integral_constant

Member-Konstanten

value
[static]
true wenn T ein Skalartyp ist, false andernfalls
(öffentliche statische Member-Konstante)

Member-Funktionen

operator bool
konvertiert das Objekt zu bool , gibt value zurück
(öffentliche Member-Funktion)
operator()
(C++14)
gibt value zurück
(öffentliche Member-Funktion)

Member-Typen

Typ Definition
value_type bool
type std:: integral_constant < bool , value >

Hinweise

Jede einzelne Speicherstelle im C++-Speichermodell, einschließlich der versteckten Speicherstellen, die von Sprachmerkmalen verwendet werden (z.B. Zeiger auf die virtuelle Tabelle), hat einen skalaren Typ (oder ist eine Folge angrenzender Bitfelder mit einer Länge ungleich Null). Die Reihenfolge von Nebeneffekten in der Ausdrucksauswertung, die Synchronisation zwischen Threads und die Abhängigkeitsordnung werden alle in Bezug auf einzelne skalare Objekte definiert.

Mögliche Implementierung

template<class T>
struct is_scalar : std::integral_constant<bool, std::is_arithmetic<T>::value
                                             || std::is_enum<T>::value
                                             || std::is_pointer<T>::value
                                             || std::is_member_pointer<T>::value
                                             || std::is_null_pointer<T>::value>
{};
*Hinweis: Der gesamte Code innerhalb der
 Tags wurde gemäß den Anforderungen nicht übersetzt, da es sich um C++-Code handelt. Die HTML-Struktur und Attribute wurden ebenfalls unverändert beibehalten.*

Beispiel

#include <iostream>
#include <type_traits>
#include <typeinfo>
#include <utility>
template<typename Head, typename... Tail>
void are_scalars(Head&& head, Tail&&... tail)
{
    using T = std::decay_t<decltype(head)>;
    std::cout << typeid(T).name() << " is "
              << (std::is_scalar_v<T> ? "" : "not ")
              << "a scalar\n";
    if constexpr (sizeof... (Tail))
    {
        are_scalars(std::forward<decltype(tail)>(tail)...);
    }
}
int main()
{
    struct S { int m; } s;
    int S::* mp = &S::m;
    enum class E { e };
    are_scalars(42, 3.14, E::e, "str", mp, nullptr, s);
}

Mögliche Ausgabe:

int is a scalar
double is a scalar
main::E is a scalar
char const* is a scalar
int main::S::* is a scalar
nullptr is a scalar
main::S is not a scalar

Siehe auch

prüft, ob ein Typ ein arithmetischer Typ ist
(Klassentemplate)
(C++11)
prüft, ob ein Typ ein Aufzählungstyp ist
(Klassentemplate)
(C++11)
prüft, ob ein Typ ein Zeigertyp ist
(Klassentemplate)
prüft, ob ein Typ ein Zeiger auf eine nicht-statische Memberfunktion oder ein nicht-statisches Memberobjekt ist
(Klassentemplate)