# std::numeric_limits<T>::traps

< cpp‎ | types‎ | numeric limits

static const bool traps; |  | (C++11 前)
static constexpr bool traps; |  | (C++11 起)

std::numeric_limits<T>::traps 的值，对所有至少有一个若用作算术运算参数则会生成陷阱的值的算术类型 `T` 为 true 。

### 标准特化

`T` | std::numeric_limits<T>::traps 的值
/* non-specialized */ | false
bool | false
char | 通常为 true
signed char | 通常为 true
unsigned char | 通常为 true
wchar_t | 通常为 true
char8_t (C++20) | 通常为 true
char16_t (C++11) | 通常为 true
char32_t (C++11) | 通常为 true
short | 通常为 true
unsigned short | 通常为 true
int | 通常为 true
unsigned int | 通常为 true
long | 通常为 true
unsigned long | 通常为 true
long long (C++11) | 通常为 true
unsigned long long (C++11) | 通常为 true
float | 通常为 false
double | 通常为 false
long double | 通常为 false

### 注解

大多数平台上，除以零始终会产生陷阱，而对所有支持值 0 的整数类型， std::numeric_limits<T>::traps 为 true 。例外是类型 bool ：即使除以 false 因为从 bool 整数提升到 int 而产生陷阱，这也是零值的 int 所产生的陷阱。零不是 bool 的值。

大多数平台上，浮点异常可以在运行时开关（例如 Linux 上的 feenableexcept() 或 Windows 上的 _controlfp ），该情况下 std::numeric_limits<T>::traps 对浮点类型的值反映程序启动时的浮点陷阱设施，它在大多数现代系统上为 false 。 DEC Alpha 程序可以是例外，若不以 `-ieee` 编译程序，则为 true 。

### 参阅

浮点环境
tinyness_before [静态] | 鉴别检测舍入前是否非正规的浮点类型 (公开静态成员常量)
has_denorm_loss [静态] | 鉴别浮点类型是否检测精度损失为非正规损失，而非不准确结果 (公开静态成员常量)