Namespaces
Variants

std::ranges::ssize

Von de.cppreference.net
 
 
Bereiche-Bibliothek
Bereichsadaptoren
 
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, ist ranges::ssize(E) ebenfalls fehlerhaft.
  • Andernfalls sei Signed gleich make-signed-like-t <decltype(ranges::size(t))>:
    • Wenn std::ptrdiff_t breiter ist als Signed, dann ist ranges::ssize(E) ausdrucksäquivalent zu static_cast<std::ptrdiff_t>(ranges::size(t)).
    • Andernfalls ist ranges::ssize(E) ausdrucksäquivalent zu static_cast<Signed>(ranges::size(t)).

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

gibt einen Integer gleich der Größe eines Ranges zurück
(Customization Point Object)
spezifiziert, dass ein Range seine Größe in konstanter Zeit kennt
(Konzept)
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)