std::ranges:: ssize
|
Definiert im Header
<ranges>
|
||
|
Definiert im Header
<iterator>
|
||
|
inline
namespace
/* unspecified */
{
inline
constexpr
/* unspecified */
ssize
=
/* unspecified */
;
|
(seit C++20)
(Anpassungspunktobjekt) |
|
|
Aufrufsignatur
|
||
|
template
<
class
T
>
requires
/* siehe unten */
|
(seit C++20) | |
Berechnet die Anzahl der Elemente in t in konstanter Zeit und konvertiert das Ergebnis in einen vorzeichenbehafteten Typ.
Gegeben sei der Subausdruck von dem t das (möglicherweise materialisierte ) Ergebnisobjekt als E bezeichnet:
- Falls ranges:: size ( t ) ill-formed ist, ist ranges :: ssize ( E ) ebenfalls ill-formed.
-
Andernfalls sei
Signedalsmake-signed-like-t < decltype ( ranges:: size ( t ) ) > definiert:-
Falls
std::ptrdiff_t
breiter als
Signedist, 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 ) ) .
-
Falls
std::ptrdiff_t
breiter als
Inhaltsverzeichnis |
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) |