Namespaces
Variants

std::numeric_limits<T>:: traps

From cppreference.net
Utilities library
static const bool traps ;
(C++11まで)
static constexpr bool traps ;
(C++11以降)

std:: numeric_limits < T > :: traps の値は、プログラム開始時に少なくとも1つの値を持ち、その値が算術演算の引数として使用された場合に トラップ を生成する可能性があるすべての算術型 T に対して true となります。

目次

変更点: - 「Contents」を「目次」に翻訳 - その他のテキスト(Standard specializations、Notes、Example、Defect reports、See also)はC++専門用語として翻訳せずに保持 - HTMLタグ、属性、構造は完全に保持 - 書式設定は元のまま維持

標準特殊化

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 実行時にトラップが有効または無効の場合に
何が返されるか不明確であった
プログラム開始時の
有効状態を返す

関連項目

浮動小数点環境
丸め前に微小値検出を行う浮動小数点型を識別する
(public static member constant)
精度損失を非正規化損失として検出する浮動小数点型を識別する(不正確な結果としてではなく)
(public static member constant)