std:: div_sat
|
헤더 파일에 정의됨
<numeric>
|
||
|
template
<
class
T
>
constexpr T div_sat ( T x, T y ) noexcept ; |
(C++26부터) | |
포화
나눗셈
x
/
y
를 계산합니다.
T
가 부호 있는 정수 형식이고,
x
가
T
의 최솟값(가장 음수)이며,
y
==
-
1
인 경우,
T
의 최댓값을 반환합니다; 그렇지 않으면
x
/
y
를 반환합니다.
y 는 0 이 아니어야 하며, 그렇지 않을 경우 동작은 정의되지 않습니다. 정의되지 않은 동작이 발생할 경우 이 함수 호출은 핵심 상수 표현 이 아닙니다.
이 오버로드는 다음 조건에서만 오버로드 해결에 참여합니다:
T
가
정수형
인 경우, 즉:
signed
char
,
short
,
int
,
long
,
long
long
, 확장 부호 정수형, 또는 이러한 타입들의 부호 없는 버전입니다. 특히,
T
는 (가능한 cv-qualified)
bool
,
char
,
wchar_t
,
char8_t
,
char16_t
, 그리고
char32_t
일 수 없습니다. 이러한 타입들은 산술 연산을 목적으로 하지 않기 때문입니다.
목차 |
매개변수
| x, y | - | 정수 값 |
반환값
포화된 x / y .
참고 사항
정수에 대한 내장 산술 연산자와 달리, 정수 승격 은 x 와 y 인수에 적용되지 않습니다.
서로 다른 타입의 두 인자가 전달되면, 호출은 컴파일에 실패합니다. 즉, 템플릿 인자 추론 에 관한 동작은 std::min 또는 std::max 와 동일합니다.
대부분의 현대 하드웨어 아키텍처는 SIMD 벡터 에 대한 포화 연산을 효율적으로 지원합니다. 여기에는 SSE2 ( x86 용)와 NEON ( ARM 용)이 포함됩니다.
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_saturation_arithmetic
|
202311L
|
(C++26) | 포화 산술 |
가능한 구현
namespace detail { template<class T> concept standard_or_extended_integral = std::is_integral_v<T> && !std::is_same_v<std::remove_cv_t<T>, bool> && !std::is_same_v<std::remove_cv_t<T>, char> && !std::is_same_v<std::remove_cv_t<T>, char8_t> && !std::is_same_v<std::remove_cv_t<T>, char16_t> && !std::is_same_v<std::remove_cv_t<T>, char32_t> && !std::is_same_v<std::remove_cv_t<T>, wchar_t>; } // namespace detail template<detail::standard_or_extended_integral T> constexpr T div_sat( T x, T y ) noexcept { if constexpr (std::is_signed_v<T>) if (x == std::numeric_limits<T>::min() && y == -1) return std::numeric_limits<T>::max(); return x / y; } |
예제
다음에서 미리 볼 수 있습니다: Compiler Explorer .
참고 항목
|
(C++26)
|
두 정수에 대한 포화 덧셈 연산
(함수 템플릿) |
|
(C++26)
|
두 정수에 대한 포화 뺄셈 연산
(함수 템플릿) |
|
(C++26)
|
두 정수에 대한 포화 곱셈 연산
(함수 템플릿) |
|
(C++26)
|
다른 정수 타입의 범위로 제한된 정수 값을 반환
(함수 템플릿) |
|
(C++17)
|
값을 한 쌍의 경계값 사이로 제한
(함수 템플릿) |
|
(C++20)
|
정수 값이 주어진 정수 타입의 범위 내에 있는지 확인
(함수 템플릿) |
|
[static]
|
주어진 비부동소수점 타입의 가장 작은 유한값, 또는 부동소수점 타입의 가장 작은 양의 정규값을 반환
(
std::numeric_limits<T>
의 public static 멤버 함수)
|
|
[static]
|
주어진 타입의 가장 큰 유한값을 반환
(
std::numeric_limits<T>
의 public static 멤버 함수)
|
외부 링크
| 1. | 브랜치 없는 포화 연산 구현 — Locklessinc.com, 2012 |
| 2. | C++ Weekly - Ep 459 - C++26의 포화 수학 연산 — Youtube.com, 2024-12-16 |