std::numeric_limits<T>:traps
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 | |
| [static] |
identifiziert Gleitkommatypen, die "tinyness" vor dem Runden erkennen (öffentliche statische Member-Konstante) |
| [static] |
identifiziert die Gleitkommatypen, die einen Präzisionsverlust als Denormalisierungsverlust und nicht als ungenaues Ergebnis erkennen (öffentliche statische Member-Konstante) |