std::saturating_cast
De es.cppreference.net
| Definido en el encabezado <numeric>
|
||
template< class T, class U >
constexpr T saturating_cast( U x ) noexcept;
|
(desde C++26) | |
Convierte el valor x a un valor de tipo T, limitando x entre los valores mínimo y máximo del tipo T.
El programa está mal formado si T o U no es un tipo entero con signo o sin signo (incluyendo tipo entero estándar y tipo entero extendido).
Parámetros
| x | - | un valor entero |
Valor de retorno
x, sixes representable como un valor de tipoT. En caso contrario,- el valor representable más grande o más pequeño de tipo
T, el que esté más cercano al valor dex.
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_saturation_arithmetic |
202311L |
(C++26) | Aritmética de saturación |
202603L |
(C++26) | Renombramiento de funciones de aritmética de saturación |
Posible implementación
Véase libstdc++ (GCC), libc++ (Clang).
Ejemplo
Puede previsualizarse en Compiler Explorer.
Ejecutar este código
#include <cstdint>
#include <limits>
#include <numeric>
int main()
{
constexpr std::int16_t x1{696};
constexpr std::int8_t x2 = std::saturating_cast<std::int8_t>(x1);
static_assert(x2 == std::numeric_limits<std::int8_t>::max());
constexpr std::uint8_t x3 = std::saturating_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::saturating_cast<std::int8_t>(y1);
static_assert(y2 == std::numeric_limits<std::int8_t>::min());
constexpr std::uint8_t y3 = std::saturating_cast<std::uint8_t>(y1);
static_assert(y3 == 0);
}
Véase también
(C++20) |
reinterpreta la representación de objetos de un tipo como la de otro (plantilla de función) |
(C++17) |
limita un valor entre un par de valores límite (plantilla de función & objeto función de algoritmo) |
(C++20) |
|
(C++20) |
comprueba si un valor entero está en el rango de un tipo entero dado (plantilla de función) |