Namespaces
Variants

std::saturating_cast

Von de.cppreference.net
 
 
 
 
Definiert in Header <numeric>
template< class T, class U >
constexpr T saturating_cast( U x ) noexcept;
(seit C++26)

Konvertiert den Wert x in einen Wert des Typs T, wobei x zwischen dem Minimal- und Maximalwert des Typs T begrenzt wird.

Das Programm ist fehlerhaft, wenn weder T noch U ein vorzeichenbehafteter oder vorzeichenloser ganzzahliger Typ ist (einschließlich Standard-Ganzzahltyp und erweiterter Ganzzahltyp).

Parameter

x - ein ganzzahliger Wert

Rückgabewert

  • x, wenn x als Wert des Typs T darstellbar ist. Andernfalls
  • der größte oder kleinste darstellbare Wert des Typs T, je nachdem, welcher näher am Wert von x liegt.

Hinweise

Feature-Test-Makro Wert Std Funktion
__cpp_lib_saturation_arithmetic 202311L (C++26) Sättigungsarithmetik
202603L (C++26) Umbenennung von Sättigungsarithmetikfunktionen

Mögliche Implementierung

Siehe libstdc++ (GCC), libc++ (Clang).

Beispiel

Kann auf Compiler Explorervorgeschaut werden.

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

Siehe auch

(C++20)
Objektrepräsentation eines Typs als die eines anderen reinterpretieren
(Funktionsschablone)
(C++17)
Begrenzt einen Wert zwischen zwei Grenzwerten
(Funktionsschablone & Algorithmus-Funktionsobjekt)
(C++20)
Überprüft, ob ein ganzzahliger Wert im Bereich eines gegebenen Ganzzahltyps liegt
(Funktionsschablone)