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 값은 프로그램 시작 시 산술 연산의 인수로 사용될 경우 트랩(trap) 을 발생시키는 값을 하나 이상 갖는 모든 산술 타입 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 는 값 0 을 지원하는 모든 정수 타입에 대해 true 입니다. 예외는 bool 타입입니다: false 로 나누는 것이 bool 에서 int 로의 정수 승격으로 인해 트랩을 발생시키지만, 실제로 트랩을 발생시키는 것은 0 값을 가진 int 입니다. 0은 bool 타입의 값이 아닙니다.

대부분의 플랫폼에서, 부동 소수점 예외는 런타임에 켜고 끌 수 있습니다(예: Linux의 feenableexcept ( ) 또는 Windows의 _controlfp ). 이 경우 부동 소수점 타입에 대한 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 출력:
bool:     traps = true
char:     traps = true
char16_t: traps = true
long:     traps = true
float:    traps = false
// Clang 출력:
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)