std::numeric_limits<T>::traps
提供: cppreference.com
< cpp | types | numeric limits
staticconstbool traps; | (C++11未満) | |
staticconstexprbool traps; | (C++11以上) | |
std::numeric_limits<T>::traps の値は、算術演算の引数として使用された場合にトラップを生成するような値が少なくともひとつはあるすべての算術型 T
に対して true になります。
[編集]標準の特殊化
T | std::numeric_limits<T>::traps の値 |
/* 非特殊化 */ | false |
bool | false |
char | 通常は true |
signedchar | 通常は true |
unsignedchar | 通常は true |
wchar_t | 通常は true |
char8_t | 通常は true |
char16_t | 通常は true |
char32_t | 通常は true |
short | 通常は true |
unsignedshort | 通常は true |
int | 通常は true |
unsignedint | 通常は true |
long | 通常は true |
unsignedlong | 通常は true |
longlong | 通常は true |
unsignedlonglong | 通常は true |
float | 通常は false |
double | 通常は false |
longdouble | 通常は false |
[編集]ノート
ほとんどのプラットフォームでは整数のゼロ除算は常にトラップを生成し、 std::numeric_limits<T>::traps は値 0 をサポートするすべての整数型に対して true になっています。 例外は bool 型です。 false による除算は bool から int への整数拡張によってトラップを生成しますが、トラップを発生するのは値 0 の int です。 0 は bool 型の値ではありません。
ほとんどのプラットフォームでは浮動小数点例外は実行時に有効化したり無効化したりでき (Linux の feenableexcept() や Windows の _controlfp など)、その場合、浮動小数点型に対する std::numeric_limits<T>::traps の値はプログラム開始時の浮動小数点トラップ機能の状態を反映します。 つまり、ほとんどの現代的なシステムでは false です。 例外は DEC Alpha であり、 -ieee
を付けずにコンパイルした場合は true になります。
[編集]関連項目
浮動小数点環境 | |
[静的] | 丸めの前に小ささを検出する浮動小数点型を識別します (パブリック静的メンバ定数) |
[静的] | 精度の損失を不正確な結果ではなく非正規化損失として検出する浮動小数点型を識別します (パブリック静的メンバ定数) |