Namespaces
Variants

std:: saturate_cast

From cppreference.net
Saturation arithmetic
Functions
(C++26)
(C++26)
(C++26)
(C++26)
saturate_cast
(C++26)
헤더 파일에 정의됨 <numeric>
template < class T, class U >
constexpr T saturate_cast ( U x ) noexcept ;
(C++26부터)

x T 타입의 값으로 변환하며, x T 타입의 최소값과 최대값 사이로 클램핑합니다.

T 또는 U 중 하나라도 부호 있는 또는 부호 없는 정수형 ( 표준 정수형 확장 정수형 포함)이 아닐 경우 프로그램은 형식이 잘못되었습니다.

목차

매개변수

x - 정수 값

반환값

  • x , 만약 x T 타입의 값으로 표현 가능한 경우. 그렇지 않으면,
  • T 타입의 표현 가능한 가장 큰 값 또는 가장 작은 값 중 x 값에 더 가까운 쪽.

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_saturation_arithmetic 202311L (C++26) 포화 산술

가능한 구현

참조: libstdc++ (GCC) .

예제

다음에서 미리 볼 수 있습니다: Compiler Explorer .

#include <cstdint>
#include <limits>
#include <numeric>
int main()
{
    constexpr std::int16_t x1{696};
    constexpr std::int8_t x2 = std::saturate_cast<std::int8_t>(x1);
    static_assert(x2 == std::numeric_limits<std::int8_t>::max());
    constexpr std::uint8_t x3 = std::saturate_cast<std::uint8_t>(x1);
    static_assert(x3 == std::numeric_limits<std::uint8_t>::max());
    constexpr std::int16_t y1{-696};
    constexpr std::int8_t y2 = std::saturate_cast<std::int8_t>(y1);
    static_assert(y2 == std::numeric_limits<std::int8_t>::min());
    constexpr std::uint8_t y3 = std::saturate_cast<std::uint8_t>(y1);
    static_assert(y3 == 0);
}

참고 항목

(C++20)
한 타입의 객체 표현을 다른 타입의 객체 표현으로 재해석함
(function template)
(C++17)
값을 한 쌍의 경계값 사이로 고정함
(function template)
(C++20)
정수 값이 주어진 정수 타입의 범위 내에 있는지 확인함
(function template)