QSpan Class

template <typename T, std::size_t E = std::size_t(-1)> class QSpan

Ein 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

Ö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
(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:

int numbers[] = {0, 1, 2};
QSpan<int, 3> span = numbers;
QSpan<const int, 3> = numbers; // also OK

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ährend std::span size_t verwendet.
  • Alle QSpan-Konstruktoren sind implizit; viele std::span Konstruktoren sind explicit.
  • 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 sind std::dynamic_extent oder andernfalls extent == N
  • und entweder S oder const S dasselbe sind wie T.

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 sind std::dynamic_extent oder extent == N
  • und entweder S oder const S das gleiche wie T sind.

[constexpr noexcept] auto QSpan::empty() const

[constexpr noexcept] auto QSpan::isEmpty() const

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.