std:: saturate_cast
|
Definido en el encabezado
<numeric>
|
||
|
template
<
class
T,
class
U
>
constexpr T saturate_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 ya sea
T
o
U
no es un tipo entero con signo o sin signo
integer type
(incluyendo
standard integer type
y
extended integer type
).
Contenidos |
Parámetros
| x | - | un valor entero |
Valor de retorno
-
x
, si
x
es representable como un valor de tipo
T. De lo contrario, -
o bien el valor representable más grande o más pequeño de tipo
T, el que esté más cerca del valor de x .
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_saturation_arithmetic
|
202311L
|
(C++26) | Aritmética de saturación |
Implementación posible
Ver libstdc++ (GCC) .
Ejemplo
Se puede previsualizar en 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); }
Véase también
|
(C++20)
|
reinterpreta la representación de objeto de un tipo como la de otro
(plantilla de función) |
|
(C++17)
|
restringe un valor entre un par de valores límite
(plantilla de función) |
|
(C++20)
|
verifica si un valor entero está en el rango de un tipo entero dado
(plantilla de función) |