std:: saturate_cast
|
Определено в заголовке
<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) | Saturation arithmetic |
Возможная реализация
См. 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)
|
переинтерпретирует представление объекта одного типа как представление другого типа
(шаблон функции) |
|
(C++17)
|
ограничивает значение парой граничных значений
(шаблон функции) |
|
(C++20)
|
проверяет, находится ли целочисленное значение в диапазоне заданного целочисленного типа
(шаблон функции) |