Namensräume
Varianten
Aktionen

std::is_arithmetic

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
is_arithmetic
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class T >
struct is_arithmetic;
(seit C++11)

std::is_arithmetic ist ein UnaryTypeTrait.

Wenn T ein arithmetischer Typ ist (d. h. ein ganzzahliger Typ oder ein Fließkommatyp) oder eine cv-qualifizierte Version davon, liefert er die Member-Konstante value gleich true. Für jeden anderen Typ ist value false.

Wenn das Programm Spezialisierungen für std::is_arithmetic oder std::is_arithmetic_v(seit C++17) hinzufügt, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Template-Parameter

T - ein zu prüfender Typ

[bearbeiten] Hilfsvariablen-Template

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

Abgeleitet von std::integral_constant

Member-Konstanten

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

Memberfunktionen

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

Membertypen

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

[bearbeiten] Hinweise

Arithmetische Typen sind die eingebauten Typen, für die die arithmetischen Operatoren (+, -, *, /) definiert sind (möglicherweise in Kombination mit den üblichen arithmetischen Konvertierungen).

Spezialisierungen von std::numeric_limits sind für alle arithmetischen Typen vorhanden.

[bearbeiten] Mögliche Implementierung

template<class T>
struct is_arithmetic : std::integral_constant<bool,
                                              std::is_integral<T>::value ||
                                              std::is_floating_point<T>::value> {};

[bearbeiten] Beispiel

#include <atomic>
#include <cstddef>
#include <type_traits>
 
class A {};
 
enum class B : int { e };
 
static_assert(
    std::is_arithmetic_v<bool>            == true  and
    std::is_arithmetic_v<char>            == true  and
    std::is_arithmetic_v<char const>      == true  and
    std::is_arithmetic_v<int>             == true  and
    std::is_arithmetic_v<int const>       == true  and
    std::is_arithmetic_v<float>           == true  and
    std::is_arithmetic_v<float const>     == true  and
    std::is_arithmetic_v<std::size_t>     == true  and
 
    std::is_arithmetic_v<char&>           == false and
    std::is_arithmetic_v<char*>           == false and
    std::is_arithmetic_v<int&>            == false and
    std::is_arithmetic_v<int*>            == false and
    std::is_arithmetic_v<float&>          == false and
    std::is_arithmetic_v<float*>          == false and
    std::is_arithmetic_v<A>               == false and
    std::is_arithmetic_v<B>               == false and
    std::is_arithmetic_v<decltype(B::e)>  == false and
    std::is_arithmetic_v<std::byte>       == false and
    std::is_arithmetic_v<std::atomic_int> == false
);
 
int main() {}

[bearbeiten] Siehe auch

prüft, ob ein Typ ein ganzzahliger Typ ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Fließkommatyp ist
(Klassenvorlage) [bearbeiten]