Namensräume
Varianten
Aktionen

std::numeric_limits<T>:traps

Von cppreference.com
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
 
static const bool traps;
(bis C++11)
static constexpr bool traps;
(seit C++11)

Der Wert von std::numeric_limits<T>::traps ist true für alle arithmetischen Typen T, die zu Beginn des Programms mindestens einen Wert haben, der, wenn er als Argument für eine arithmetische Operation verwendet wird, eine Trap (Ausnahmebedingung) erzeugt.

Inhalt

[bearbeiten] Standard-Spezialisierungen

T Wert von std::numeric_limits<T>::traps
/* nicht spezialisiert */ false
bool false
char normalerweise true
signed char normalerweise true
unsigned char normalerweise true
wchar_t normalerweise true
char8_t (seit C++20) normalerweise true
char16_t (seit C++11) normalerweise true
char32_t (seit C++11) normalerweise true
short normalerweise true
unsigned short normalerweise true
int normalerweise true
unsigned int normalerweise true
long normalerweise true
unsigned long normalerweise true
long long (seit C++11) normalerweise true
unsigned long long (seit C++11) normalerweise true
float normalerweise false
double normalerweise false
long double normalerweise false

[bearbeiten] Hinweise

Auf den meisten Plattformen löst die Ganzzahldivision durch Null immer eine Trap aus, und std::numeric_limits<T>::traps ist true für alle Ganzzahltypen, die den Wert 0 unterstützen. Die Ausnahme ist der Typ bool: Obwohl die Division durch false aufgrund der ganzzahligen Promotion von bool zu int eine Trap auslöst, ist es der Wert Null von int, der die Trap auslöst. Null ist kein Wert des Typs bool.

Auf den meisten Plattformen können Gleitkomma-Ausnahmen zur Laufzeit ein- und ausgeschaltet werden (z. B. feenableexcept() unter Linux oder _controlfp unter Windows). In diesem Fall spiegelt der Wert von std::numeric_limits<T>::traps für Gleitkommatypen den Zustand der Gleitkomma-Trap-Einrichtung zum Zeitpunkt des Programmstarts wider, der auf den meisten modernen Systemen false ist. Eine Ausnahme wäre ein DEC Alpha-Programm, bei dem er true ist, wenn es ohne -ieee kompiliert wird.

[bearbeiten] Beispiel

#include <iostream>
#include <limits>
 
int main()
{
    std::cout << std::boolalpha
              << "bool:     traps = " << std::numeric_limits<bool>::traps << '\n'
              << "char:     traps = " << std::numeric_limits<char>::traps << '\n'
              << "char16_t: traps = " << std::numeric_limits<char16_t>::traps << '\n'
              << "long:     traps = " << std::numeric_limits<long>::traps << '\n'
              << "float:    traps = " << std::numeric_limits<float>::traps << '\n';
}

Mögliche Ausgabe

// GCC output:
bool:     traps = true
char:     traps = true
char16_t: traps = true
long:     traps = true
float:    traps = false
 
// Clang output:
bool:     traps = false
char:     traps = true
char16_t: traps = true
long:     traps = true
float:    traps = false

[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 497 C++98 war unklar, was zurückgegeben wird, wenn eine Trap
zur Laufzeit aktiviert oder deaktiviert ist
gibt den Aktivierungsstatus zurück
zu Beginn des Programms

[bearbeiten] Siehe auch

Gleitkomma-Umgebung
identifiziert Gleitkommatypen, die "tinyness" vor dem Runden erkennen
(öffentliche statische Member-Konstante) [bearbeiten]
identifiziert die Gleitkommatypen, die einen Präzisionsverlust als Denormalisierungsverlust und nicht als ungenaues Ergebnis erkennen
(öffentliche statische Member-Konstante) [bearbeiten]