std::numeric_limits<T>:: traps
|
static
const
bool
traps
;
|
(hasta C++11) | |
|
static
constexpr
bool
traps
;
|
(desde C++11) | |
El valor de
std::
numeric_limits
<
T
>
::
traps
es
true
para todos los tipos aritméticos
T
que tienen al menos un valor al inicio del programa que, si se utiliza como argumento para una operación aritmética, generará un
trap
.
Contenidos |
Especializaciones estándar
T
|
valor de std:: numeric_limits < T > :: traps |
| /* non-specialized */ | false |
| bool | false |
| char | normalmente true |
| signed char | normalmente true |
| unsigned char | normalmente true |
| wchar_t | normalmente true |
| char8_t (desde C++20) | normalmente true |
| char16_t (desde C++11) | normalmente true |
| char32_t (desde C++11) | normalmente true |
| short | normalmente true |
| unsigned short | normalmente true |
| int | normalmente true |
| unsigned int | normalmente true |
| long | normalmente true |
| unsigned long | normalmente true |
| long long (desde C++11) | normalmente true |
| unsigned long long (desde C++11) | normalmente true |
| float | normalmente false |
| double | normalmente false |
| long double | normalmente false |
Notas
En la mayoría de las plataformas, la división entera entre cero siempre genera una trampa, y std:: numeric_limits < T > :: traps es true para todos los tipos enteros que admiten el valor 0 . La excepción es el tipo bool : aunque la división entre false genera una trampa debido a la promoción integral de bool a int , es el int con valor cero el que genera la trampa. Cero no es un valor del tipo bool .
En la mayoría de las plataformas, las excepciones de punto flotante pueden activarse y desactivarse en tiempo de ejecución (por ejemplo,
feenableexcept
(
)
en Linux o
_controlfp
en Windows), en cuyo caso el valor de
std::
numeric_limits
<
T
>
::
traps
para tipos de punto flotante refleja el estado de la capacidad de captura de punto flotante al inicio del programa, que es
false
en la mayoría de los sistemas modernos. Una excepción sería un programa
DEC Alpha
, donde es
true
si se compila sin
-ieee
.
Ejemplo
#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'; }
Salida posible:
// 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
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 497 | C++98 |
no estaba claro qué se devuelve si el trapping
está habilitado o deshabilitado en tiempo de ejecución |
devuelve el estado de habilitación
al inicio del programa |
Véase también
| Entorno de punto flotante | |
|
[static]
|
identifica los tipos de punto flotante que detectan tinyness antes del redondeo
(constante de miembro estático público) |
|
[static]
|
identifica los tipos de punto flotante que detectan pérdida de precisión como pérdida por desnormalización en lugar de resultado inexacto
(constante de miembro estático público) |