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 mindestens einen Wert zu Beginn des Programms haben, der, wenn er als Argument für eine arithmetische Operation verwendet wird, eine Falle auslöst.
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 | |
|
[static]
|
identifiziert Gleitkommatypen, die Tinyness vor dem Runden erkennen
(öffentliche statische Member-Konstante) |
|
[static]
|
identifiziert die Gleitkommatypen, die Genauigkeitsverlust als Denormalisierungsverlust rather than inexact result erkennen
(öffentliche statische Member-Konstante) |