Namespaces
Variants

std:: saturate_cast

From cppreference.net
Saturation arithmetic
Functions
(C++26)
(C++26)
(C++26)
(C++26)
saturate_cast
(C++26)
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)