Namespaces
Variants

std:: saturate_cast

From cppreference.net
Saturation arithmetic
Functions
(C++26)
(C++26)
(C++26)
(C++26)
saturate_cast
(C++26)
Definiert im Header <numeric>
template < class T, class U >
constexpr T saturate_cast ( U x ) noexcept ;
(seit C++26)

Konvertiert den Wert x zu einem Wert vom Typ T , wobei x zwischen den Minimal- und Maximalwerten des Typs T begrenzt wird.

Das Programm ist fehlerhaft, wenn entweder T oder U kein vorzeichenbehafteter oder vorzeichenloser Integer-Typ ist (einschließlich Standard-Integer-Typ und erweiterter Integer-Typ ).

Inhaltsverzeichnis

Parameter

x - ein ganzzahliger Wert

Rückgabewert

  • x , falls x als Wert des Typs T darstellbar ist. Andernfalls,
  • entweder den größten oder kleinsten darstellbaren Wert des Typs T , je nachdem, welcher näher am Wert von x liegt.

Hinweise

Feature-Test Makro Wert Standard Funktion
__cpp_lib_saturation_arithmetic 202311L (C++26) Sättigungsarithmetik

Mögliche Implementierung

Siehe libstdc++ (GCC) .

Beispiel

Kann auf Compiler Explorer vorgeführt werden.

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

Siehe auch

(C++20)
interpretiert die Objektdarstellung eines Typs als die eines anderen
(Funktions-Template)
(C++17)
begrenzt einen Wert zwischen einem Paar von Grenzwerten
(Funktions-Template)
(C++20)
prüft, ob ein ganzzahliger Wert im Wertebereich eines gegebenen Ganzzahltyps liegt
(Funktions-Template)