QSpan Class
template <typename T, std::size_t E = std::size_t(-1)> class QSpanEin nicht-eigener Container über zusammenhängende Daten. Mehr...
Kopfzeile: | #include <QSpan> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Seit: | Qt 6.7 |
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Typen
const_iterator | |
const_pointer | |
const_reference | |
const_reverse_iterator | |
difference_type | |
element_type | |
iterator | |
pointer | |
reference | |
reverse_iterator | |
size_type | |
value_type |
Öffentliche Funktionen
QSpan() | |
QSpan(QSpan<S, N> other) | |
QSpan(Range &&r) | |
QSpan(const std::array<S, N> &arr) | |
QSpan(q20::type_identity_t<T> (&)[N] arr) | |
QSpan(std::array<S, N> &arr) | |
QSpan(std::initializer_list<QSpan<T, E>::value_type> il) | |
QSpan(std::span<S, N> other) | |
QSpan(It first, It last) | |
QSpan(It first, qsizetype count) | |
QSpan(const QSpan<T, E> &other) | |
QSpan(QSpan<T, E> &&other) | |
~QSpan() | |
auto | back() const |
auto | begin() const |
auto | cbegin() const |
auto | cend() const |
auto | crbegin() const |
auto | crend() const |
auto | data() const |
auto | empty() const |
auto | end() const |
auto | first() const |
auto | first(QSpan<T, E>::size_type n) const |
auto | front() const |
auto | isEmpty() const |
auto | last() const |
auto | last(QSpan<T, E>::size_type n) const |
auto | rbegin() const |
auto | rend() const |
auto | size() const |
auto | size_bytes() const |
auto | sliced(QSpan<T, E>::size_type pos) const |
auto | sliced(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n) const |
auto | subspan() const |
auto | subspan() const |
auto | subspan(QSpan<T, E>::size_type pos) const |
auto | subspan(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n) const |
QSpan<T, E> & | operator=(QSpan<T, E> &&other) |
QSpan<T, E> & | operator=(const QSpan<T, E> &other) |
QSpan<T, E>::reference | operator[](QSpan<T, E>::size_type idx) const |
Statische öffentliche Mitglieder
const std::size_t | extent |
Verwandte Nicht-Mitglieder
(since 6.8) auto | as_bytes(QSpan<T, E> s) |
(since 6.8) auto | as_writable_bytes(QSpan<T, E> s) |
Detaillierte Beschreibung
Ein QSpan referenziert einen zusammenhängenden Teil eines anderen zusammenhängenden Containers. Er dient als Schnittstellentyp für alle Arten von zusammenhängenden Containern, ohne dass zuerst ein eigener Container wie QList oder std::vector konstruiert werden muss.
Die Daten, auf die ein QSpan verweist, können als Array (oder Array-kompatible Datenstruktur wie QList, std::vector, QVarLengthArray, etc.) dargestellt werden. QSpan selbst speichert lediglich einen Zeiger auf die Daten, so dass die Benutzer sicherstellen müssen, dass QSpan-Objekte die Daten, auf die sie verweisen, nicht überdauern.
Im Gegensatz zu Ansichten wie QStringView, QLatin1StringView und QUtf8StringView können referenzierte Daten über ein QSpan-Objekt geändert werden. Um dies zu verhindern, konstruieren Sie eine QSpan über eine const T
(siehe Const and Mutable Spans):
int numbers[] = {0, 1, 2}; QSpan<int> span = numbers; span[0] = 42; // numbers == {42, 1, 2}; QSpan<const int> cspan = numbers; cspan[0] = 0; // ERROR: cspan[0] is read-only
Spans mit variabler Größe und fester Größe
Ein QSpan kann eine feste Größe oder eine variable Größe haben.
Ein Bereich mit variabler Größe wird gebildet, indem das zweite Template-Argument weggelassen wird (oder es auf std::dynamic_extent
gesetzt wird, was jedoch nur in C++20-Builds verfügbar ist), wie im obigen Beispiel zu sehen.
Eine Spanne mit fester Größe wird durch die Übergabe einer Zahl als zweites Argument der Vorlage gebildet:
Wie der Name schon sagt, ist die size() eines Bereichs fester Größe zur Kompilierzeit festgelegt, während die size() eines Bereichs variabler Größe erst zur Laufzeit bestimmt wird.
Ein Bereich fester Größe ist nicht standardmäßig konstruierbar (es sei denn, seine extent ist Null (0)). Eine Spanne variabler Größe ist standardmäßig konstruierbar und hat data() == nullptr
und size() == 0
.
Ein Bereich fester Größe kann implizit in einen Bereich variabler Größe umgewandelt werden. Die umgekehrte Richtung (variable Länge in feste Länge) hat die Voraussetzung, dass die Größen beider Bereiche übereinstimmen müssen.
Konstante und veränderliche Spannen
Anders als bei eigenen Containern ist const
in QSpan oberflächlich: Sie können die Daten immer noch durch einen const QSpan ändern (aber nicht durch einen QSpan<const T>
), und begin() und end() sind nicht auf const
/non-const
überladen. Es gibt jedoch cbegin() und cend(), die const_iterators zurückgeben, die eine Änderung der Daten verhindern, obwohl T
nicht const ist:
int numbers[] = {0, 1, 2}; const QSpan<int> span = numbers; span.front() = 42; // OK, numbers[0] == 42 now *span.begin() = 31; // OK, numbers[0] == 31 now *span.cbegin() = -1; // ERROR: cannot assign through a const_iterator
Andere Eigenschaften
QSpan sollte als Wert übergeben werden, nicht als Referenz-zu-Konst:
void consume(QSpan<const int> data); // OK void consume(const QSpan<const int> &data); // works, but is non-idiomatic and less efficient
QSpan<T,N>
ist ein Literal Type, unabhängig davon, ob T
ein Literal Type ist oder nicht.
QSpan vs. std::span
QSpan ist eng an std::span angelehnt, hat aber einige Unterschiede, die wir hier besprechen werden. Da beide implizit ineinander umgewandelt werden, steht es Ihnen frei, in Ihrem eigenen Code zu wählen, was Ihnen besser gefällt.
- QSpan verwendet den signierten qsizetype als
size_type
, währendstd::span
size_t
verwendet. - Alle QSpan-Konstruktoren sind implizit; viele
std::span
Konstruktoren sindexplicit
. - QSpan kann aus Containern mit rWerten konstruiert werden,
std::span
nicht.
Die letzten beiden sind für die Quellcode-Kompatibilität erforderlich, wenn Funktionen, die eigene Container verwenden, konvertiert werden, um stattdessen QSpan zu verwenden, was ein wichtiger Anwendungsfall in Qt ist. Die Verwendung von qsizetype ist für die Konsistenz mit dem Rest der Qt-Container. QSpan-Template-Argumente verwenden immer noch size_t, um die Einführung unnötiger Fehlerbedingungen (negative Größen) zu vermeiden.
Kompatible Iteratoren
QSpan kann aus einem Iterator und einer Größe oder aus einem Iteratorpaar konstruiert werden, vorausgesetzt die Iteratoren sind kompatibel. Letztendlich sollte dies C++20 std::contiguous_iterator
und std::sentinel_for
bedeuten, aber während Qt noch C++17 unterstützt, werden nur rohe Zeiger als zusammenhängende Iteratoren betrachtet.
Kompatible Bereiche
QSpan kann auch aus einem kompatiblen Bereich konstruiert werden. Ein Bereich ist kompatibel, wenn er compatible iterators hat.
Siehe auch QList, QStringView, QLatin1StringView, und QUtf8StringView.
Dokumentation der Membertypen
[alias]
QSpan::const_iterator
Ein Alias für const T*
bzw. const_pointer
.
Siehe auch const_pointer, iterator, const_reverse_iterator, und Const and Mutable Spans.
[alias]
QSpan::const_pointer
Ein Alias für const T*
bzw. const element_type*
.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
Siehe auch element_type, pointer, const_reference, const_iterator, und Const and Mutable Spans.
[alias]
QSpan::const_reference
Ein Alias für const T&
bzw. const element_type&
.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
Siehe auch element_type, reference, const_pointer, und Const and Mutable Spans.
[alias]
QSpan::const_reverse_iterator
Ein Alias für std::reverse_iterator<const_iterator>
.
Siehe auch const_iterator, reverse_iterator, und Const and Mutable Spans.
[alias]
QSpan::difference_type
Ein Alias für qptrdiff. Diese differs from std::span
.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
[alias]
QSpan::element_type
Ein Alias für T
. Beinhaltet die const
, falls vorhanden.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
Siehe auch value_type, pointer, und Const and Mutable Spans.
[alias]
QSpan::iterator
Ein Alias für T*
bzw. pointer
. Beinhaltet die const
, falls vorhanden.
Siehe auch pointer, const_iterator, reverse_iterator, und Const and Mutable Spans.
[alias]
QSpan::pointer
Ein Alias für T*
bzw. element_type*
. Beinhaltet die const
, falls vorhanden.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
Siehe auch element_type, const_pointer, reference, iterator, und Const and Mutable Spans.
[alias]
QSpan::reference
Ein Alias für T&
bzw. element_type&
. Beinhaltet die const
, falls vorhanden.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
Siehe auch element_type, const_reference, pointer, und Const and Mutable Spans.
[alias]
QSpan::reverse_iterator
Ein Alias für std::reverse_iterator<iterator>
. Beinhaltet die const
, falls vorhanden.
Siehe auch iterator, const_reverse_iterator, und Const and Mutable Spans.
[alias]
QSpan::size_type
Ein Alias für qsizetype. Diese differs from std::span
.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
[alias]
QSpan::value_type
Ein Alias für T
. Schließt die const
aus, falls vorhanden.
Dieser Alias wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
Siehe auch element_type und Const and Mutable Spans.
Dokumentation der Mitgliedsfunktionen
[default]
QSpan::QSpan(QSpan<T, E> &&other)
[default]
QSpan::QSpan(const QSpan<T, E> &other)
[default]
QSpan<T, E> &QSpan::operator=(QSpan<T, E> &&other)
[default]
QSpan<T, E> &QSpan::operator=(const QSpan<T, E> &other)
[default]
QSpan::~QSpan()
Diese speziellen Mitgliedsfunktionen sind implizit definiert.
Hinweis: Verschiebungen sind gleichbedeutend mit Kopien. Nur data() und size() werden von Bereich zu Bereich kopiert, nicht die referenzierten Daten.
[constexpr noexcept]
template <typename S, size_t N, QSpan<T, E>::if_qualification_conversion<S> = true> QSpan::QSpan(const std::array<S, N> &arr)
[constexpr noexcept]
template <size_t N> QSpan::QSpan(q20::type_identity_t<T> (&)[N] arr)
[constexpr noexcept]
template <typename S, size_t N, QSpan<T, E>::if_qualification_conversion<S> = true> QSpan::QSpan(std::array<S, N> &arr)
Konstruiert eine QSpan, die auf die Daten in dem übergebenen Array arr verweist.
Hinweis: Dieser Konstruktor nimmt nur an der Überlastauflösung teil, wenn
- entweder
N
oder extent sindstd::dynamic_extent
oder andernfalls extent==
N
- und entweder
S
oderconst S
dasselbe sind wieT
.
Hinweis: q20::type_identity_t
ist ein C++17 Rückport von C++20's std::type_identity_t
.
[constexpr noexcept]
template <typename S, size_t N, QSpan<T, E>::if_qualification_conversion<S> = true> QSpan::QSpan(QSpan<S, N> other)
[constexpr noexcept]
template <typename S, size_t N, QSpan<T, E>::if_qualification_conversion<S> = true> QSpan::QSpan(std::span<S, N> other)
Konstruiert eine QSpan, die auf die Daten in der übergebenen Spanne other verweist.
Hinweis: Dieser Konstruktor nimmt nur an der Überlastauflösung teil, wenn
- entweder
N
oder extent sindstd::dynamic_extent
oder extent==
N
- und entweder
S
oderconst S
das gleiche wieT
sind.
Gibt zurück, ob die Spanne leer ist, d.h. ob size() == 0
.
Diese Funktionen tun dasselbe: empty() ist für STL-Kompatibilität und isEmpty() für Qt-Kompatibilität vorgesehen.
Siehe auch size() und size_bytes().
[constexpr]
auto QSpan::sliced(QSpan<T, E>::size_type pos) const
[constexpr]
auto QSpan::subspan(QSpan<T, E>::size_type pos) const
Gibt eine variable-sized Spanne der Größe size() - pos
zurück, die auf den Rest dieser Spanne verweist, nachdem die ersten pos Elemente weggelassen wurden.
pos muss nicht-negativ sein.
Diese Spanne muss mindestens pos Elemente enthalten (E
>= pos und size() >= pos), ansonsten ist das Verhalten undefiniert.
Diese Funktionen bewirken dasselbe: subspan() ist für STL-Kompatibilität und sliced() für Qt-Kompatibilität vorgesehen.
Siehe auch subspan(), first(QSpan<T,E>::size_type), und last(QSpan<T,E>::size_type).
[constexpr]
auto QSpan::sliced(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n) const
[constexpr]
auto QSpan::subspan(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n) const
Gibt eine variable-sized Spanne der Größe n zurück, die die n Elemente dieser Spanne ab pos referenziert.
Sowohl pos als auch n müssen nicht-negativ sein.
Diese Spanne muss mindestens pos + n
Elemente enthalten (E
>= pos + n
und size() >= pos + n
), ansonsten ist das Verhalten undefiniert.
Diese Funktionen bewirken dasselbe: subspan() ist für STL-Kompatibilität und sliced() für Qt-Kompatibilität vorgesehen.
Siehe auch subspan(), first(QSpan<T,E>::size_type), und last(QSpan<T,E>::size_type).
[default]
QSpan::QSpan()
Standard-Konstruktor.
Dieser Konstruktor ist nur vorhanden, wenn E
entweder Null (0) oder std::dynamic_extent
ist. Mit anderen Worten: nur Spannen mit fester oder variabler Größe sind standardmäßig konstruierbar.
Siehe auch extent und Variable-Size and Fixed-Size Spans.
[constexpr]
template <typename Range, QSpan<T, E>::if_compatible_range<Range> = true> QSpan::QSpan(Range &&r)
Konstruiert einen QSpan, der auf die Daten im übergebenen Bereich r verweist.
Hinweis: Dieser Konstruktor nimmt nur an der Überlastauflösung teil, wenn Range
a compatible range ist.
[constexpr]
QSpan::QSpan(std::initializer_list<QSpan<T, E>::value_type> il)
Konstruiert eine QSpan, die auf die Daten in der übergebenen Initialisierungsliste il verweist.
Hinweis: Dieser Konstruktor nimmt nur an der Überlastauflösung teil, wenn T
const
-qualifiziert ist.
Hinweis: Dieser Konstruktor ist noexcept
nur, wenn E
std::dynamic_extent
ist.
Hinweis: Wenn E
nicht std::dynamic_extent
ist und die Größe von il nicht E
ist, ist das Verhalten undefiniert.
Siehe auch Const and Mutable Spans.
[constexpr]
template <typename It, QSpan<T, E>::if_compatible_iterator<It> = true> QSpan::QSpan(It first, It last)
Konstruiert einen QSpan, der die Daten ab first referenziert und die Länge (last - first) hat.
[first, last)
muss ein gültiger Bereich sein.
Hinweis: Dieser Konstruktor nimmt nur an der Überlastauflösung teil, wenn It
gleich a compatible iterator ist.
[constexpr]
template <typename It, QSpan<T, E>::if_compatible_iterator<It> = true> QSpan::QSpan(It first, qsizetype count)
Konstruiert einen QSpan, der die Daten referenziert, die bei first beginnen und die Länge count haben.
[first, count)
muss ein gültiger Bereich sein.
Hinweis: Dieser Konstruktor nimmt nur an der Überlastauflösung teil, wenn It
gleich a compatible iterator ist.
[constexpr]
auto QSpan::back() const
Gibt einen Verweis auf das letzte Element in der Spanne zurück.
Die Spanne darf nicht leer sein, sonst ist das Verhalten undefiniert.
Siehe auch operator[](), front(), size(), empty(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::begin() const
Gibt einen Interator zurück, der auf den Anfang der Spanne zeigt.
Da QSpan Iteratoren nur Zeiger sind, ist dies dasselbe wie der Aufruf von data().
Siehe auch end(), cbegin(), rbegin(), crbegin(), data(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::cbegin() const
Gibt eine const_iterator zurück, die auf den Anfang der Spanne zeigt.
Es wird ein schreibgeschützter Iterator zurückgegeben, auch wenn T
nicht const
ist:
QSpan<int> span = ~~~; *span.begin() = 42; // OK *span.cbegin() = 42; // ERROR: cannot assign through a const_iterator
Siehe auch cend(), begin(), crbegin(), rbegin(), data(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::cend() const
Gibt ein const_iterator zurück, das auf eine Stelle hinter dem Ende der Spanne zeigt.
Siehe auch cbegin(), end(), crend(), rend(), data(), size(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::crbegin() const
Gibt ein const_reverse_iterator zurück, das auf den Anfang der umgekehrten Spanne zeigt.
Siehe auch crend(), rbegin(), cbegin(), begin(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::crend() const
Gibt ein const_reverse_iterator zurück, das auf eine Stelle hinter dem Ende der umgekehrten Spanne zeigt.
Siehe auch crbegin(), rend(), cend(), end(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::data() const
Gibt einen Zeiger auf den Anfang der Spanne zurück.
Entspricht dem Aufruf von begin().
Siehe auch begin(), front(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::end() const
Gibt einen Iterator zurück, der auf einen Punkt hinter dem Ende der Spanne zeigt.
Da QSpan Iteratoren nur Zeiger sind, ist dies dasselbe wie der Aufruf von data() + size()
.
Siehe auch begin(), cend(), rend(), crend(), data(), size(), und Const and Mutable Spans.
[constexpr noexcept(...)]
template <std::size_t Count> auto QSpan::first() const
Gibt eine fixed-sized -Spanne der Größe Count
zurück, die auf die ersten Count
-Elemente von *this
verweist.
Der Bereich muss mindestens Count
Elemente enthalten (E
>= Count
und size() >= Count
), ansonsten ist das Verhalten undefiniert.
Hinweis: Diese Funktion ist noexcept, wenn subspan_always_succeeds_v<Count>
true
ist.
Siehe auch first(QSpan<T,E>::size_type), last(), und subspan().
[constexpr]
auto QSpan::first(QSpan<T, E>::size_type n) const
Gibt eine variable-sized -Spanne der Größe n zurück, die auf die ersten n -Elemente von *this
verweist.
n muss nicht-negativ sein.
Die Spanne muss mindestens n Elemente enthalten (E
>= n und size() >= n), ansonsten ist das Verhalten undefiniert.
Siehe auch first<N>(), last(QSpan<T,E>::size_type), subspan(QSpan<T,E>::size_type), subspan(QSpan<T,E>::size_type, QSpan<T,E>::size_type), und sliced().
[constexpr]
auto QSpan::front() const
Gibt einen Verweis auf das erste Element in der Spanne zurück.
Der span darf nicht leer sein, sonst ist das Verhalten undefiniert.
Siehe auch operator[](), back(), size(), empty(), und Const and Mutable Spans.
[constexpr noexcept(...)]
template <std::size_t Count> auto QSpan::last() const
Gibt eine fixed-sized -Spanne der Größe Count
zurück, die auf die letzten Count
-Elemente von *this
verweist.
Die Spanne muss mindestens Count
Elemente enthalten (E
>= Count
und size() >= Count
), ansonsten ist das Verhalten undefiniert.
Hinweis: Diese Funktion ist noexcept, wenn subspan_always_succeeds_v<Count>
true
ist.
Siehe auch last(QSpan<T,E>::size_type), first(), und subspan().
[constexpr]
auto QSpan::last(QSpan<T, E>::size_type n) const
Gibt eine variable-sized -Spanne der Größe n zurück, die auf die letzten n -Elemente von *this
verweist.
n muss nicht-negativ sein.
Die Spanne muss mindestens n Elemente enthalten (E
>= n und size() >= n), ansonsten ist das Verhalten undefiniert.
Siehe auch last(), first(QSpan<T,E>::size_type), subspan(QSpan<T,E>::size_type), subspan(QSpan<T,E>::size_type, QSpan<T,E>::size_type), und sliced().
[constexpr noexcept]
auto QSpan::rbegin() const
Gibt ein reverse_iterator zurück, das auf den Anfang der umgekehrten Spanne zeigt.
Siehe auch rend(), crbegin(), begin(), cbegin(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::rend() const
Gibt ein reverse_iterator zurück, das auf eine Stelle hinter dem Ende der umgekehrten Spanne zeigt.
Siehe auch rbegin(), crend(), end(), cend(), und Const and Mutable Spans.
[constexpr noexcept]
auto QSpan::size() const
Gibt die Größe des Bereichs zurück, d. h. die Anzahl der Elemente, auf die er verweist.
Siehe auch size_bytes(), empty(), und isEmpty().
[constexpr noexcept]
auto QSpan::size_bytes() const
Gibt die Größe des Bereichs in Bytes zurück, d. h. die Anzahl der Elemente multipliziert mit sizeof(T)
.
Siehe auch size(), empty(), und isEmpty().
[constexpr noexcept(...)]
template <std::size_t Offset, std::size_t Count> auto QSpan::subspan() const
Gibt einen Bereich der Größe Count
zurück, der die Count
Elemente dieses Bereichs ab Offset
referenziert.
Wenn *this
ein Bereich variabler Größe ist, ist der Rückgabetyp ein Bereich variabler Größe, andernfalls ist es ein Bereich fester Größe.
Dieser Bereich muss mindestens Offset + Count
Elemente enthalten (E
>= Offset + Count
und size() >= Offset + Count
), ansonsten ist das Verhalten undefiniert.
Hinweis: Diese Funktion ist noexcept, wenn subspan_always_succeeds_v<Offset + Count>
true
ist.
Siehe auch subspan(QSpan<T,E>::size_type, QSpan<T,E>::size_type), subspan(), first(), last(), und Variable-Size and Fixed-Size Spans.
[constexpr noexcept(...)]
template <std::size_t Offset> auto QSpan::subspan() const
Gibt einen Bereich der Größe E - Offset
zurück, der auf den Rest dieses Bereichs nach Weglassen der ersten Offset
Elemente verweist.
Wenn *this
ein Bereich variabler Größe ist, ist der Rückgabetyp ein Bereich variabler Größe, andernfalls ist es ein Bereich fester Größe.
Dieser Bereich muss mindestens Offset
Elemente enthalten (E
>= Offset
und size() >= Offset
), ansonsten ist das Verhalten undefiniert.
Hinweis: Diese Funktion ist noexcept, wenn subspan_always_succeeds_v<Offset>
true
ist.
Siehe auch subspan(QSpan<T,E>::size_type), subspan(), first(), last(), und Variable-Size and Fixed-Size Spans.
[constexpr]
QSpan<T, E>::reference QSpan::operator[](QSpan<T, E>::size_type idx) const
Gibt einen Verweis auf das Element am Index idx in der Spanne zurück.
Der Index muss im Bereich liegen, d. h. idx >= 0 und idx < size(), andernfalls ist das Verhalten undefiniert.
Siehe auch front(), back(), size(), empty(), und Const and Mutable Spans.
Dokumentation der Mitgliedsvariablen
const std::size_t QSpan::extent
Das zweite Template-Argument von QSpan<T, E>
, d.h. E
. Dies ist std::dynamic_extent
für variable-sized spans.
Hinweis: Während alle anderen Größen und Indizes in QSpan qsizetype verwenden, ist diese Variable, wie E
, aus Kompatibilität mit std::span
und std::dynamic_extent
vom Typ size_t
.
Siehe auch size().
Verwandte Nicht-Mitglieder
[noexcept, since 6.8]
auto as_bytes(QSpan<T, E> s)
Gibt s als QSpan<const std::byte, E'>
zurück, dessen size() gleich s.size_bytes()
ist.
Wenn E
std::dynamic_extent
ist, dann ist auch E'
gleich. Andernfalls: E' = E * sizeof(T)
.
Hinweis: q20::dynamic_extent
ist ein C++17 Rückport von C++20's std::dynamic_extent
.
Diese Funktion wurde in Qt 6.8 eingeführt.
Siehe auch as_writable_bytes(), size_bytes(), und Const and Mutable Spans.
[noexcept, since 6.8]
auto as_writable_bytes(QSpan<T, E> s)
Gibt s als QSpan<std::byte, E'>
zurück, dessen size() gleich s.size_bytes()
ist.
Wenn E
std::dynamic_extent
ist, dann ist auch E'
gleich. Andernfalls: E' = E * sizeof(T)
.
Hinweis: Diese Funktion nimmt nur dann an der Überlastauflösung teil, wenn !std::is_const_v<T>
.
Hinweis: q20::dynamic_extent
ist ein C++17-Backport der C++20-Funktion std::dynamic_extent
.
Diese Funktion wurde in Qt 6.8 eingeführt.
Siehe auch as_bytes(), size_bytes(), und Const and Mutable Spans.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.