std::numeric_limits<T>::traps
From cppreference.com
static const bool traps; |
(C++11まで) | |
| static constexpr bool traps; |
(C++11以降) | |
std::numeric_limits<T>::traps の値は、プログラム開始時点で、算術演算の引数として使用された場合にトラップを生成する値が少なくとも1つ存在するすべての算術型 T に対して true です。
目次 |
[編集] 標準特殊化
T
|
std::numeric_limits<T>::traps の値 |
| /* 非特殊化 */ | 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 |
[編集] 注記
ほとんどのプラットフォームでは、ゼロによる整数除算は常にトラップされ、std::numeric_limits<T>::traps は、値 0 をサポートするすべての整数型に対して true です。例外は bool 型です。bool は int に整数昇格されるため、false による除算はトラップされますが、トラップするのは int のゼロ値です。ゼロは bool 型の値ではありません。
ほとんどのプラットフォームでは、浮動小数点例外は実行時にオン/オフできます(例: Linux では feenableexcept()、Windows では _controlfp)。この場合、浮動小数点型に対する std::numeric_limits<T>::traps の値は、プログラム起動時の浮動小数点トラッピング機能の状態を反映しており、ほとんどの最新システムでは false です。例外は、-ieee なしでコンパイルされた場合の DEC Alpha プログラムで、この場合は true です。
[編集] 例
このコードを実行
#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'; }
実行結果の例
// 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
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 497 | C++98 | 実行時にトラッピングが 有効または無効になっている場合に何が返されるかは不明でした |
プログラム開始時の有効状態を返します プログラム開始時 |
[編集] 関連項目
| 浮動小数点環境 | |
| [static] |
丸め前に微小値 (tinyness) を検出する浮動小数点数型を識別する (public static member constant) |
| [static] |
精度の損失を不正確な結果ではなく非正規化損失として検出する浮動小数点数型を識別する (public static member constant) |