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, wennxals Wert des TypsTdarstellbar ist. Andernfalls- der größte oder kleinste darstellbare Wert des Typs
T, je nachdem, welcher näher am Wert vonxliegt.
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.
Diesen Code ausführen
#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) |
|
(C++20) |
Überprüft, ob ein ganzzahliger Wert im Bereich eines gegebenen Ganzzahltyps liegt (Funktionsschablone) |