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, 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 | |
|
[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) |