Namespaces
Variants

std::numeric_limits<T>:: traps

From cppreference.net
Utilities library
static const bool traps ;
(jusqu'à C++11)
static constexpr bool traps ;
(depuis C++11)

La valeur de std:: numeric_limits < T > :: traps est true pour tous les types arithmétiques T qui ont au moins une valeur au début du programme qui, si elle est utilisée comme argument à une opération arithmétique, générera un trap .

Table des matières

Spécialisations standards

T valeur de std:: numeric_limits < T > :: traps
/* non-specialized */ false
bool false
char généralement true
signed char généralement true
unsigned char généralement true
wchar_t généralement true
char8_t (depuis C++20) généralement true
char16_t (depuis C++11) généralement true
char32_t (depuis C++11) généralement true
short généralement true
unsigned short généralement true
int généralement true
unsigned int généralement true
long généralement true
unsigned long généralement true
long long (depuis C++11) généralement true
unsigned long long (depuis C++11) généralement true
float généralement false
double généralement false
long double généralement false

Notes

Sur la plupart des plateformes, la division entière par zéro génère toujours un piège, et std:: numeric_limits < T > :: traps vaut true pour tous les types entiers qui prennent en charge la valeur 0 . L'exception est le type bool : bien que la division par false génère un piège en raison de la promotion entière de bool vers int , c'est la valeur zéro du int qui génère le piège. Zéro n'est pas une valeur du type bool .

Sur la plupart des plateformes, les exceptions en virgule flottante peuvent être activées et désactivées à l'exécution (par exemple feenableexcept ( ) sur Linux ou _controlfp sur Windows), auquel cas la valeur de std:: numeric_limits < T > :: traps pour les types en virgule flottante reflète l'état du mécanisme de capture des exceptions en virgule flottante au moment du démarrage du programme, qui est false sur la plupart des systèmes modernes. Une exception serait un programme DEC Alpha , où il est true s'il est compilé sans l'option -ieee .

Exemple

#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';
}

Sortie possible :

// Sortie GCC :
bool:     traps = true
char:     traps = true
char16_t: traps = true
long:     traps = true
float:    traps = false
// Sortie Clang :
bool:     traps = false
char:     traps = true
char16_t: traps = true
long:     traps = true
float:    traps = false

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 497 C++98 il n'était pas clair ce qui est retourné si le trapping
est activé ou désactivé à l'exécution
retourne le statut d'activation
au début du programme

Voir aussi

Environnement en virgule flottante
identifie les types en virgule flottante qui détectent la petitesse avant l'arrondi
(constante de membre statique publique)
identifie les types en virgule flottante qui détectent la perte de précision comme une perte de dénormalisation plutôt qu'un résultat inexact
(constante de membre statique publique)