Spec-Zone.ru › C++

std::saturate_cast

Определено в заголовке <numeric>
template< class T, class U >
constexpr T saturate_cast( U x ) noexcept;
(с C++26)

Преобразует значение x в значение типа T, ограничив x между минимальным и максимальным значениями типа T.

Ошибка времени компиляции, если либо T либо U не являются целым типом со знаком или без знака (целые типы), включая стандартные целые типы и расширенные целые типы (с C++11).

Параметры

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);
}

См. также

bit_cast
(C++20)
переинтерпретирует представление объекта одного типа как другого
(шаблон функции)
clamp
(C++17)
ограничивает значение между парой граничных значений
(шаблон функции)
in_range
(C++20)
проверяет, находится ли целое значение в диапазоне заданного целого типа
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/saturate_cast

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API