std::saturate_cast
Von cppreference.com
| 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
Tdarstellbar 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.
Führen Sie diesen Code aus
#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) |
| (C++17) |
klemmt einen Wert zwischen einem Paar von Grenzwerte (Funktionsvorlage) |
| (C++20) |
prüft, ob ein Ganzzahlwert im Bereich eines gegebenen Ganzzahltyps liegt (Funktionsvorlage) |