std:: saturate_cast
From cppreference.net
|
헤더 파일에 정의됨
<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) |