std::numeric_limits<T>:: traps
|
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 の値 |
| /* 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 |
注記
ほとんどのプラットフォームでは、整数のゼロ除算は常にトラップし、 std:: numeric_limits < T > :: traps は値 0 をサポートするすべての整数型に対して true です。例外は型 bool です: false による除算は bool から int への整数昇格によりトラップを発生させますが、実際にトラップを発生させるのは値ゼロの int です。ゼロは型 bool の値ではありません。
ほとんどのプラットフォームでは、浮動小数点例外は実行時にオン/オフを切り替えることができます(例:
feenableexcept
(
)
on Linux or
_controlfp
on Windows)。この場合、浮動小数点型に対する
std::
numeric_limits
<
T
>
::
traps
の値は、プログラム起動時点での浮動小数点トラップ機能の状態を反映します。これはほとんどの現代システムでは
false
です。例外は
DEC Alpha
プログラムであり、
-ieee
なしでコンパイルされた場合には
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]
|
丸め前に微小値検出を行う浮動小数点型を識別する
(public static member constant) |
|
[static]
|
精度損失を非正規化損失として検出する浮動小数点型を識別する(不正確な結果としてではなく)
(public static member constant) |