Namensräume
Varianten
Aktionen

std::is_signed

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)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
is_signed
(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_signed;
(seit C++11)

std::is_signed ist ein UnaryTypeTrait.

Prüft, ob T ein vorzeichenbehafteter arithmetischer Typ ist.

  • Wenn std::is_arithmetic<T>::value gleich true ist, stellt es die Member-Konstante value bereit, die gleich T(-1) < T(0) ist.
  • Andernfalls stellt es die Member-Konstante value bereit, die gleich false ist.

Wenn das Programm Spezialisierungen für std::is_signed oder std::is_signed_v 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_signed_v = is_signed<T>::value;
(seit C++17)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T ein vorzeichenbehafteter arithmetischer Typ ist, andernfalls false
(ö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] Mögliche Implementierung

namespace detail
{
    template<typename T, bool = std::is_arithmetic<T>::value>
    struct is_signed : std::integral_constant<bool, T(-1) < T(0)> {};
 
    template<typename T>
    struct is_signed<T, false> : std::false_type {};
}
 
template<typename T>
struct is_signed : detail::is_signed<T>::type {};

[bearbeiten] Beispiel

#include <iostream>
#include <type_traits>
 
class A {};
static_assert(std::is_signed_v<A> == false);
 
class B { int i; };
static_assert(std::is_signed_v<B> == false);
 
enum C : int {};
static_assert(std::is_signed_v<C> == false);
 
enum class D : int {};
static_assert(std::is_signed_v<D> == false);
 
static_assert
(
    std::is_signed<signed int>::value == true and // C++11
    std::is_signed<signed int>() == true and      // C++11
    std::is_signed<signed int>{} == true and      // C++11
    std::is_signed_v<signed int> == true and      // C++17
    std::is_signed_v<unsigned int> == false and
    std::is_signed_v<float> == true and
    std::is_signed_v<bool> == false and
    std::is_signed_v<signed char> == true and
    std::is_signed_v<unsigned char> == false
);
 
int main()
{
    // signedness of char is implementation-defined:
    std::cout << std::boolalpha << std::is_signed_v<char> << '\n';
}

Mögliche Ausgabe

true

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2197 C++11 value könnte true sein, auch wenn T kein arithmetischer Typ ist kann in diesem Fall nur false sein

[bearbeiten] Siehe auch

prüft, ob ein Typ ein vorzeichenloser arithmetischer Typ ist
(Klassenvorlage) [bearbeiten]
[static]
identifiziert vorzeichenbehaftete Typen
(öffentlich statische Member-Konstante von std::numeric_limits<T>) [bearbeiten]
prüft, ob ein Typ ein arithmetischer Typ ist
(Klassenvorlage) [bearbeiten]
erhält den entsprechenden vorzeichenbehafteten Typ für den gegebenen ganzzahligen Typ
(Klassenvorlage) [bearbeiten]
erhält den entsprechenden vorzeichenbehafteten Typ für den gegebenen ganzzahligen Typ
(Klassenvorlage) [bearbeiten]