std:: saturate_cast
|
Défini dans l'en-tête
<numeric>
|
||
|
template
<
class
T,
class
U
>
constexpr T saturate_cast ( U x ) noexcept ; |
(depuis C++26) | |
Convertit la valeur
x
en une valeur de type
T
, en limitant
x
entre les valeurs minimales et maximales du type
T
.
Le programme est mal formé si soit
T
soit
U
n'est pas un type entier signé ou non signé
integer type
(incluant
standard integer type
et
extended integer type
).
Table des matières |
Paramètres
| x | - | une valeur entière |
Valeur de retour
-
x
, si
x
est représentable comme une valeur de type
T. Sinon, -
soit la plus grande ou la plus petite valeur représentable de type
T, selon celle qui est la plus proche de la valeur de x .
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_saturation_arithmetic
|
202311L
|
(C++26) | Arithmétique de saturation |
Implémentation possible
Voir libstdc++ (GCC) .
Exemple
Peut être prévisualisé sur 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); }
Voir aussi
|
(C++20)
|
réinterprète la représentation objet d'un type comme celle d'un autre
(modèle de fonction) |
|
(C++17)
|
borne une valeur entre une paire de valeurs limites
(modèle de fonction) |
|
(C++20)
|
vérifie si une valeur entière est dans la plage d'un type entier donné
(modèle de fonction) |