Namespaces
Variants

std::numeric_limits<T>:: traps

From cppreference.net
Utilities library
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
identifica los tipos de punto flotante que detectan tinyness antes del redondeo
(constante de miembro estático público)
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)