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) 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)
проверяет, находится ли целочисленное значение в диапазоне заданного целочисленного типа
(шаблон функции)