Namensräume
Varianten
Aktionen

std::saturate_cast

Von cppreference.com
< cpp‎ | numeric
 
 
 
Definiert in der Header-Datei <numeric>
template< class T, class U >
constexpr T saturate_cast( U x ) noexcept;
(seit C++26)

Konvertiert den Wert x in einen Wert vom Typ T und klemmt x zwischen dem minimalen und maximalen Wert des Typs T ein.

Das Programm ist schlecht geformt, wenn entweder T oder U kein vorzeichenbehafteter oder vorzeichenloser Ganzzahltyp ist (einschließlich Standard-Ganzzahltyp und erweiterter Ganzzahltyp).

Inhalt

[bearbeiten] Parameter

x - ein Ganzzahlwert

[bearbeiten] Rückgabewert

  • x, wenn x als Wert vom Typ T darstellbar ist. Andernfalls,
  • entweder der größte oder kleinste darstellbare Wert vom Typ T, je nachdem, welcher Wert näher an dem Wert von x liegt.

[bearbeiten] Hinweise

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

[bearbeiten] Mögliche Implementierung

Siehe libstdc++ (GCC).

[bearbeiten] Beispiel

Kann auf Compiler Explorer in der Vorschau angezeigt 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);
}

[bearbeiten] Siehe auch

(C++20)
interpretiert die Objekt-Repräsentation eines Typs als die eines anderen Typs neu
(Funktion-Template) [bearbeiten]
(C++17)
klemmt einen Wert zwischen einem Paar von Grenzwerte
(Funktionsvorlage) [editieren]
(C++20)
prüft, ob ein Ganzzahlwert im Bereich eines gegebenen Ganzzahltyps liegt
(Funktionsvorlage) [edit]