std::sized_sentinel_for, std::disable_sized_sentinel_for
| Definiert in Header <iterator> |
||
| template< class S, class I > concept sized_sentinel_for = |
(1) | (seit C++20) |
| template< class S, class I > inline constexpr bool disable_sized_sentinel_for = false; |
(2) | (seit C++20) |
sized_sentinel_for gibt an, dass ein Objekt vom Iterator-Typ I und ein Objekt vom Sentinel-Typ S subtrahiert werden können, um die Distanz zwischen ihnen in konstanter Zeit zu berechnen.disable_sized_sentinel_for kann verwendet werden, um zu verhindern, dass Iteratoren und Sentinels, die subtrahiert werden können, aber nicht tatsächlich sized_sentinel_for modellieren, das Konzept erfüllen.disable_sized_sentinel_for für cv-unqualified Nicht-Array-Objekttypen S und I spezialisieren, solange mindestens einer davon ein programmdefinierter Typ ist. Solche Spezialisierungen sind in Konstanten Ausdrücken verwendbar und haben den Typ const bool.Inhalt |
[bearbeiten] Semantische Anforderungen
Sei i ein Iterator vom Typ I und s ein Sentinel vom Typ S, sodass [i, s) einen Bereich bezeichnet. Sei n die kleinste Anzahl von Anwendungen von ++i, die erforderlich sind, um bool(i == s) zu true zu machen. I und S modellieren sized_sentinel_for<S, I> nur, wenn alle folgenden Bedingungen erfüllt sind.
- Wenn n durch std::iter_difference_t<I> darstellbar ist, dann ist s - i wohldefiniert und gleich n.
- Wenn -n durch std::iter_difference_t<I> darstellbar ist, dann ist i - s wohldefiniert und gleich -n.
[bearbeiten] Gleichheitserhaltung
Ausdrücke, die in requires-Ausdrücken der Standardbibliothekskonzepte deklariert sind, müssen gleichheitserhaltend sein (sofern nicht anders angegeben).
[bearbeiten] Implizite Ausdrucksvariationen
Ein requires-Ausdruck, der einen Ausdruck verwendet, der für einen konstanten Lvalue-Operanden nicht-modifizierend ist, erfordert ebenfalls implizite Ausdrucksvariationen.
[bearbeiten] Siehe auch
| (C++20) |
spezifiziert, dass ein Range seine Größe in konstanter Zeit kennt (Konzept) |
| (C++20) |
gibt eine Ganzzahl zurück, die der Größe eines Ranges entspricht (Customization Point Objekt) |