std::ranges::ssize
| Definiert in Header <ranges>
|
||
| Definiert in Header <iterator>
|
||
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ ssize = /* unspecified */;
}
|
(seit C++20) (Customization-Point-Objekt) |
|
| Aufrufsignatur |
||
template< class T >
requires /* see below */
constexpr auto ssize( T&& t );
|
(seit C++20) | |
Berechnet die Anzahl der Elemente in t in konstanter Zeit und konvertiert das Ergebnis in einen vorzeichenbehafteten Typ.
Gegeben den Teilausdruck, von dem t das (ggf. materialisierte) Ergebnisobjekt als E bezeichnet:
- Wenn
ranges::size(t)fehlerhaft ist, istranges::ssize(E)ebenfalls fehlerhaft. - Andernfalls sei
Signedgleichmake-signed-like-t<decltype(ranges::size(t))>:- Wenn std::ptrdiff_t breiter ist als
Signed, dann istranges::ssize(E)ausdrucksäquivalent zustatic_cast<std::ptrdiff_t>(ranges::size(t)). - Andernfalls ist
ranges::ssize(E)ausdrucksäquivalent zustatic_cast<Signed>(ranges::size(t)).
- Wenn std::ptrdiff_t breiter ist als
Customization Point Objects
Der Name
ranges::ssize
bezeichnet ein
Customization Point Object
, welches ein konstantes
Funktionsobjekt
eines
Literal
semiregular
Klassentyps ist. Weitere Details finden Sie unter
CustomizationPointObject
.
Hinweise
Wenn ranges :: ssize ( e ) für einen Ausdruck e gültig ist, dann ist der Rückgabetyp ein signed-integer-like type .
Beispiel
#include <array> #include <iostream> #include <ranges> #include <type_traits> int main() { std::array arr{1, 2, 3, 4, 5}; auto s = std::ranges::ssize(arr); std::cout << "ranges::ssize(arr) = " << s << '\n' << "ranges::ssize is " << (std::is_signed_v<decltype(s)> ? "signed" : "unsigned") << '\n'; std::cout << "reversed arr: "; for (--s; s >= 0; --s) std::cout << arr[s] << ' '; std::cout << "\n" "s = " << s << '\n'; }
Ausgabe:
ranges::ssize(arr) = 5 ranges::ssize is signed reversed arr: 5 4 3 2 1 s = -1
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3403 | C++20 |
ranges::size
funktionierte für einige Nicht-Bereichstypen, aber
ranges::ssize
nicht
|
Funktionsfähig gemacht |
Siehe auch
|
(C++20)
|
gibt einen Integer gleich der Größe eines Ranges zurück
(Customization Point Object) |
|
(C++20)
|
spezifiziert, dass ein Range seine Größe in konstanter Zeit kennt
(Konzept) |
|
(C++20)
|
gibt die Distanz zwischen einem Iterator und einem Sentinel zurück, oder zwischen Anfang und Ende eines Ranges
(Algorithm Function Object) |
|
(C++17)
(C++20)
|
gibt die Größe eines Containers oder Arrays zurück
(Function Template) |