std:: saturate_cast
|
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
Tdarstellbar 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) |