Namespaces
Variants

std::numeric_limits<T>:: traps

From cppreference.net
Utilities library
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 mindestens einen Wert zu Beginn des Programms haben, der, wenn er als Argument für eine arithmetische Operation verwendet wird, einen Trap erzeugt.

Inhaltsverzeichnis

Standardspezialisierungen

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

Hinweise

Auf den meisten Plattformen führt eine ganzzahlige Division durch Null immer zu einem Trap, und std:: numeric_limits < T > :: traps ist true für alle ganzzahligen Typen, die den Wert 0 unterstützen. Die Ausnahme ist der Typ bool : Obwohl die Division durch false aufgrund der integralen Promotion von bool zu int einen Trap verursacht, ist es der nullwertige int , der den 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-Trapping-Einrichtung zum Zeitpunkt des Programmstarts wider, was false auf den meisten modernen Systemen ist. Eine Ausnahme wäre ein DEC Alpha -Programm, wo es true ist, wenn ohne -ieee kompiliert.

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-Ausgabe:
bool:     traps = true
char:     traps = true
char16_t: traps = true
long:     traps = true
float:    traps = false
// Clang-Ausgabe:
bool:     traps = false
char:     traps = true
char16_t: traps = true
long:     traps = true
float:    traps = false

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 es war unklar, was zurückgegeben wird, wenn Trapping
zur Laufzeit aktiviert oder deaktiviert ist
gibt den Aktivierungsstatus
zum Startzeitpunkt des Programms zurück

Siehe auch

Gleitkomma-Umgebung
identifiziert Gleitkommatypen, die Tinyness vor dem Runden erkennen
(öffentliche statische Member-Konstante)
identifiziert die Gleitkommatypen, die Genauigkeitsverlust als Denormalisierungsverlust rather than inexact result erkennen
(öffentliche statische Member-Konstante)