Sur cette page

QSpan Class

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

Un conteneur non propriétaire sur des données contiguës. Plus d'informations...

En-tête : #include <QSpan>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Depuis : Qt 6.7

Note : Toutes les fonctions de cette classe sont réentrantes.

Types publics

Fonctions publiques

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
(since 6.9) void chop(QSpan<T, E>::size_type n)
(since 6.9) auto chopped(QSpan<T, E>::size_type n) 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
(since 6.9) void slice(QSpan<T, E>::size_type pos)
(since 6.9) void slice(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n)
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

Membres publics statiques

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)

Description détaillée

Un QSpan fait référence à une partie contiguë d'un autre conteneur contigu. Il sert d'interface pour tous les types de conteneurs contigus, sans qu'il soit nécessaire de construire un conteneur propriétaire tel que QList ou std::vector au préalable.

Les données référencées par un QSpan peuvent être représentées sous la forme d'un tableau (ou d'une structure de données compatible avec les tableaux, telle que QList, std::vector, QVarLengthArray, etc.) QSpan lui-même ne fait que stocker un pointeur sur les données, de sorte que les utilisateurs doivent s'assurer que les objets QSpan ne survivent pas aux données qu'ils référencent.

Contrairement aux vues telles que QStringView, QLatin1StringView et QUtf8StringView, les données référencées peuvent être modifiées par l'intermédiaire d'un objet QSpan. Pour éviter cela, construisez un QSpan au-dessus d'un const T (voir 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

Espaces de taille variable et de taille fixe

Un QSpan peut être de taille fixe ou variable.

Une étendue de taille variable est formée en omettant le deuxième argument du modèle (ou en lui attribuant la valeur std::dynamic_extent, qui n'est toutefois disponible que dans les versions C++20), comme le montre l'exemple ci-dessus.

Une portée de taille fixe est formée en passant un nombre comme deuxième argument du modèle :

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

Comme son nom l'indique, le size() d'une portée de taille fixe est fixé à la compilation, tandis que le size() d'une portée de taille variable n'est déterminé qu'à l'exécution.

Une portée de taille fixe n'est pas constructible par défaut (sauf si son extent est zéro (0)). Une portée de taille variable est constructible par défaut et aura data() == nullptr et size() == 0.

Une portée de taille fixe peut être implicitement convertie en une portée de taille variable. Dans le sens inverse (longueur variable vers longueur fixe), la condition préalable est que les tailles des deux portées soient identiques.

Portées constantes et mutables

Contrairement aux conteneurs propriétaires, const est peu profond dans QSpan : vous pouvez toujours modifier les données par le biais d'un QSpan const (mais pas par le biais d'un QSpan<const T>), et begin() et end() ne sont pas surchargés sur const/non-const. Il y a cependant cbegin() et cend() qui renvoient des const_iterators qui empêchent la modification des données même si T n'est pas const :

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

Autres propriétés

QSpan doit être transmis par valeur, et non par référence à const :

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> est un type littéral, que T soit ou non un type littéral.

QSpan vs. std::span

QSpan est étroitement modelé sur std::span, mais a quelques différences que nous allons discuter ici. Comme ils se convertissent implicitement l'un en l'autre, vous êtes libre de choisir celui que vous préférez dans votre propre code.

  • QSpan utilise le qsizetype signé comme size_type alors que std::span utilise size_t.
  • (depuis Qt 6.9) QSpan<const T> ne détache pas les conteneurs Qt, std::span le fait.
  • Tous les constructeurs de QSpan sont implicites ; de nombreux constructeurs de std::span sont explicit.
  • QSpan peut être construit à partir de conteneurs propriétaires de rvaleurs, std::span ne le peut pas.

Les deux derniers sont nécessaires pour la compatibilité des sources lorsque les fonctions qui prenaient des conteneurs propriétaires sont converties pour prendre QSpan à la place, ce qui est un cas d'utilisation d'une importance vitale dans Qt. L'utilisation de qsizetype est pour la cohérence avec le reste des conteneurs de Qt. Les arguments des modèles de QSpan utilisent toujours size_t pour éviter d'introduire des conditions d'erreur inutiles (tailles négatives).

Itérateurs compatibles

QSpan peut être construit à partir d'un itérateur et d'une taille ou d'une paire d'itérateurs, à condition que les itérateurs soient compatibles. A terme, cela devrait signifier C++20 std::contiguous_iterator et std::sentinel_for, mais tant que Qt supporte encore C++17, seuls les pointeurs bruts sont considérés comme des itérateurs contigus.

Plages compatibles

QSpan peut également être construit à partir d'une plage compatible. Une plage est compatible si elle possède compatible iterators.

Voir aussi QList, QStringView, QLatin1StringView, et QUtf8StringView.

Documentation sur les types de membres

[alias] QSpan::const_iterator

Un alias pour const T* et const_pointer, respectivement.

Voir aussi const_pointer, iterator, const_reverse_iterator, et Const and Mutable Spans.

[alias] QSpan::const_pointer

Un alias pour const T* et const element_type*, respectivement.

Cet alias est fourni pour des raisons de compatibilité avec le STL.

Voir aussi element_type, pointer, const_reference, const_iterator, et Const and Mutable Spans.

[alias] QSpan::const_reference

Un alias pour const T& et const element_type&, respectivement.

Cet alias est fourni pour des raisons de compatibilité avec le STL.

Voir aussi element_type, reference, const_pointer, et Const and Mutable Spans.

[alias] QSpan::const_reverse_iterator

Un alias pour std::reverse_iterator<const_iterator>.

Voir aussi const_iterator, reverse_iterator, et Const and Mutable Spans.

[alias] QSpan::difference_type

Un alias pour qptrdiff. Il s'agit de differs from std::span.

Cet alias est fourni pour des raisons de compatibilité avec la STL.

[alias] QSpan::element_type

Un alias pour T. Inclut le site const, le cas échéant.

Cet alias est fourni pour des raisons de compatibilité avec le STL.

Voir aussi value_type, pointer, et Const and Mutable Spans.

[alias] QSpan::iterator

Un alias pour T* et pointer, respectivement. Inclut le site const, le cas échéant.

Voir aussi pointer, const_iterator, reverse_iterator, et Const and Mutable Spans.

[alias] QSpan::pointer

Un alias pour T* et element_type*, respectivement. Inclut le site const, le cas échéant.

Cet alias est fourni pour des raisons de compatibilité avec la STL.

Voir aussi element_type, const_pointer, reference, iterator, et Const and Mutable Spans.

[alias] QSpan::reference

Un alias pour T& et element_type&, respectivement. Inclut le site const, le cas échéant.

Cet alias est fourni pour des raisons de compatibilité avec la STL.

Voir aussi element_type, const_reference, pointer, et Const and Mutable Spans.

[alias] QSpan::reverse_iterator

Un alias pour std::reverse_iterator<iterator>. Inclut le site const, le cas échéant.

Voir aussi iterator, const_reverse_iterator, et Const and Mutable Spans.

[alias] QSpan::size_type

Un alias de qsizetype. Il s'agit d'un differs from std::span.

Cet alias est fourni pour des raisons de compatibilité avec la STL.

[alias] QSpan::value_type

Un alias pour T. Exclut le site const, le cas échéant.

Cet alias est fourni pour des raisons de compatibilité avec le STL.

Voir aussi element_type et Const and Mutable Spans.

Documentation des fonctions membres

[default] QSpan::QSpan()

Constructeur par défaut.

Ce constructeur n'est présent que si E vaut zéro (0) ou std::dynamic_extent. En d'autres termes, seules les travées de taille fixe ou variable peuvent être construites par défaut.

Voir aussi extent et Variable-Size and Fixed-Size Spans.

[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)

Construit un QSpan référençant les données dans le span fourni other.

Contraintes

Ne participe à la résolution des surcharges que si

  • N ou extent sont std::dynamic_extent ou extent == N
  • et si S ou const S est identique à T.

[constexpr] template <typename Range, QSpan<T, E>::if_compatible_range<Range> = true> QSpan::QSpan(Range &&r)

Construit un QSpan référençant les données de l'intervalle fourni r.

Contraintes

Ne participe à la résolution de surcharge que si Range est a compatible range.

[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)

[constexpr noexcept] template < typename S, size_t N, QSpan<T, E>::if_qualification_conversion<S> = true > QSpan::QSpan(const std::array<S, N> &arr)

Construit un QSpan référençant les données du tableau fourni arr.

Remarque : q20::type_identity_t est un rétro-portage en C++17 de la fonction std::type_identity_t.

Contraintes

Participe à la résolution de surcharge seulement si

  • N ou extent sont std::dynamic_extent ou autrement extent == N
  • et si S ou const S est identique à T.

[constexpr] QSpan::QSpan(std::initializer_list<QSpan<T, E>::value_type> il)

Construit un QSpan référençant les données de la liste d'initialisation fournie il.

Remarque : Ce constructeur n'est noexcept que si E est std::dynamic_extent.

Note : Si E n'est pas std::dynamic_extent et que la taille de il n'est pas E, le comportement est indéfini.

Contraintes

Participe à la résolution des surcharges uniquement si T est qualifié pour const.

Voir également Const and Mutable Spans.

[constexpr] template <typename It, QSpan<T, E>::if_compatible_iterator<It> = true> QSpan::QSpan(It first, It last)

Construit un QSpan référençant les données commençant à first et ayant une longueur (last - first).

[first, last) doit être un intervalle valide.

Contraintes

Ne participe à la résolution des surcharges que si It est a compatible iterator.

[constexpr] template <typename It, QSpan<T, E>::if_compatible_iterator<It> = true> QSpan::QSpan(It first, qsizetype count)

Construit un QSpan référençant les données commençant à first et ayant pour longueur count.

[first, count) doit être un intervalle valide.

Contraintes

Ne participe à la résolution des surcharges que si It est a compatible iterator.

[default] QSpan::QSpan(const QSpan<T, E> &other)

[default] QSpan::QSpan(QSpan<T, E> &&other)

[default] QSpan<T, E> &QSpan::operator=(const QSpan<T, E> &other)

[default] QSpan<T, E> &QSpan::operator=(QSpan<T, E> &&other)

[default] QSpan::~QSpan()

Ces Special Member Functions sont implicitement définies.

Remarque : les déplacements sont équivalents à des copies. Seules les fonctions data() et size() sont copiées d'une portée à l'autre, et non les données référencées.

[constexpr] auto QSpan::back() const

Renvoie une référence au dernier élément de la portée.

Le span ne doit pas être vide, sinon le comportement est indéfini.

Voir aussi operator[](), front(), size(), empty() et Const and Mutable Spans.

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

Renvoie un itérateur pointant vers le début de l'étendue.

Comme les itérateurs de QSpan ne sont que des pointeurs, cela revient à appeler data().

Voir aussi end(), cbegin(), rbegin(), crbegin(), data() et Const and Mutable Spans.

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

Renvoie un const_iterator pointant vers le début de l'étendue.

Cela renvoie un itérateur en lecture seule même si T n'est pas const:

QSpan<int> span = ~~~;
*span.begin() = 42; // OK
*span.cbegin() = 42; // ERROR: cannot assign through a const_iterator

Voir aussi cend(), begin(), crbegin(), rbegin(), data(), et Const and Mutable Spans.

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

Renvoie un const_iterator pointant vers une date postérieure à la fin de l'intervalle.

Voir aussi cbegin(), end(), crend(), rend(), data(), size(), et Const and Mutable Spans.

[constexpr, since 6.9] void QSpan::chop(QSpan<T, E>::size_type n)

Identique à *this = chopped(n ) .

Cette fonction n'est disponible que sur variable-sized spans.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi chopped().

[constexpr, since 6.9] auto QSpan::chopped(QSpan<T, E>::size_type n) const

Renvoie une portée variable-sized de taille size() - n référençant les premiers éléments size() - n de cette portée.

Identique à first(size() - n).

n doit être non négatif.

Cette portée doit contenir au moins n éléments (E >= n et size() >= n), sinon le comportement est indéfini.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi subspan(), first(QSpan<T,E>::size_type), last(QSpan<T,E>::size_type), et chop().

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

Renvoie un const_reverse_iterator pointant vers le début de la portée inversée.

Voir aussi crend(), rbegin(), cbegin(), begin(), et Const and Mutable Spans.

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

Renvoie un const_reverse_iterator pointant vers une date postérieure à la fin de la portée inversée.

Voir aussi crbegin(), rend(), cend(), end(), et Const and Mutable Spans.

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

Renvoie un pointeur sur le début de la portée.

C'est la même chose que d'appeler begin().

Voir aussi begin(), front(), et Const and Mutable Spans.

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

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

Renvoie si l'étendue est vide, c'est-à-dire si size() == 0.

Ces fonctions font la même chose : empty() est fourni pour la compatibilité STL et isEmpty() est fourni pour la compatibilité Qt XML.

Voir également size() et size_bytes().

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

Renvoie un itérateur pointant vers un point au-delà de la fin de l'étendue.

Comme les itérateurs de QSpan ne sont que des pointeurs, cela revient à appeler data() + size().

Voir aussi begin(), cend(), rend(), crend(), data(), size() et Const and Mutable Spans.

[constexpr noexcept(...)] template <std::size_t Count> auto QSpan::first() const

Renvoie une portée fixed-sized de taille Count faisant référence aux premiers éléments Count de *this.

L'étendue doit contenir au moins Count éléments (E >= Count et size() >= Count), sinon le comportement est indéfini.

Remarque : cette fonction est noexcept lorsque subspan_always_succeeds_v<Count> est true.

Voir également first(QSpan<T,E>::size_type), last() et subspan().

[constexpr] auto QSpan::first(QSpan<T, E>::size_type n) const

Renvoie une portée variable-sized de taille n référençant les premiers éléments n de *this.

n doit être non négatif.

L'étendue doit contenir au moins n éléments (E >= n et size() >= n), sinon le comportement est indéfini.

Voir aussi 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), sliced() et chopped().

[constexpr] auto QSpan::front() const

Renvoie une référence au premier élément de la portée.

Le span ne doit pas être vide, sinon le comportement est indéfini.

Voir aussi operator[](), back(), size(), empty() et Const and Mutable Spans.

[constexpr noexcept(...)] template <std::size_t Count> auto QSpan::last() const

Renvoie une portée fixed-sized de taille Count faisant référence aux derniers éléments Count de *this.

L'étendue doit contenir au moins Count éléments (E >= Count et size() >= Count), sinon le comportement est indéfini.

Remarque : cette fonction est noexcept lorsque subspan_always_succeeds_v<Count> est true.

Voir également last(QSpan<T,E>::size_type), first() et subspan().

[constexpr] auto QSpan::last(QSpan<T, E>::size_type n) const

Renvoie une portée variable-sized de taille n référençant les derniers éléments n de *this.

n doit être non négatif.

L'étendue doit contenir au moins n éléments (E >= n et size() >= n), sinon le comportement est indéfini.

Voir aussi last(), first(QSpan<T,E>::size_type), subspan(QSpan<T,E>::size_type), subspan(QSpan<T,E>::size_type, QSpan<T,E>::size_type), sliced() et chopped().

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

Renvoie un reverse_iterator pointant vers le début de la portée inversée.

Voir aussi rend(), crbegin(), begin(), cbegin(), et Const and Mutable Spans.

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

Renvoie un reverse_iterator pointant vers une date postérieure à la fin de la portée inversée.

Voir aussi rbegin(), crend(), end(), cend(), et Const and Mutable Spans.

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

Renvoie la taille de l'étendue, c'est-à-dire le nombre d'éléments qu'elle référence.

Voir aussi size_bytes(), empty() et isEmpty().

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

Renvoie la taille de l'étendue en octets, c'est-à-dire le nombre d'éléments multiplié par sizeof(T).

Voir aussi size(), empty() et isEmpty().

[constexpr, since 6.9] void QSpan::slice(QSpan<T, E>::size_type pos)

Identique à *this = sliced(pos ) .

Cette fonction n'est disponible que sur variable-sized spans.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi sliced().

[constexpr, since 6.9] void QSpan::slice(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n)

Identique à *this = sliced(pos , n ) .

Cette fonction n'est disponible que sur variable-sized spans.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi sliced().

[constexpr noexcept(...)] template <std::size_t Offset, std::size_t Count> auto QSpan::subspan() const

Renvoie une portée de taille Count référençant les éléments Count de cette portée à partir de Offset.

Si *this est une étendue de taille variable, le type de retour est une étendue de taille variable, sinon il s'agit d'une étendue de taille fixe.

Cette portée doit contenir au moins Offset + Count éléments (E >= Offset + Count et size() >= Offset + Count), sinon le comportement est indéfini.

Remarque : cette fonction est noexcept lorsque subspan_always_succeeds_v<Offset + Count> est true.

Voir aussi subspan(QSpan<T,E>::size_type, QSpan<T,E>::size_type), first(), last() et Variable-Size and Fixed-Size Spans.

[constexpr noexcept(...)] template <std::size_t Offset> auto QSpan::subspan() const

Renvoie une portée de taille E - Offset référençant le reste de cette portée après avoir supprimé les premiers éléments Offset.

Si *this est une étendue de taille variable, le type de retour est une étendue de taille variable, sinon il s'agit d'une étendue de taille fixe.

Cette portée doit contenir au moins Offset éléments (E >= Offset et size() >= Offset), sinon le comportement est indéfini.

Remarque : cette fonction est noexcept lorsque subspan_always_succeeds_v<Offset> est true.

Voir aussi subspan(QSpan<T,E>::size_type), subspan(), first(), last() et Variable-Size and Fixed-Size Spans.

[constexpr] auto QSpan::subspan(QSpan<T, E>::size_type pos) const

[constexpr] auto QSpan::sliced(QSpan<T, E>::size_type pos) const

Renvoie une étendue variable-sized de taille size() - pos référençant le reste de cette étendue après avoir supprimé les premiers éléments pos.

pos doit être non négatif.

Cette étendue doit contenir au moins pos éléments (E >= pos et size() >= pos), sinon le comportement est indéfini.

Ces fonctions font la même chose : subspan() est fourni pour la compatibilité STL et sliced() est fourni pour la compatibilité Qt XML.

Voir aussi subspan(), first(QSpan<T,E>::size_type), last(QSpan<T,E>::size_type), chopped() et slice().

[constexpr] auto QSpan::subspan(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n) const

[constexpr] auto QSpan::sliced(QSpan<T, E>::size_type pos, QSpan<T, E>::size_type n) const

Renvoie une étendue variable-sized de taille n référençant les éléments n de cette étendue à partir de pos.

pos et n doivent être non négatifs.

Cette portée doit contenir au moins pos + n éléments (E >= pos + n et size() >= pos + n), sinon le comportement est indéfini.

Ces fonctions font la même chose : subspan() est fourni pour la compatibilité STL et sliced() est fourni pour la compatibilité Qt XML.

Voir aussi subspan(), first(QSpan<T,E>::size_type), last(QSpan<T,E>::size_type), chopped() et slice().

[constexpr] QSpan<T, E>::reference QSpan::operator[](QSpan<T, E>::size_type idx) const

Renvoie une référence à l'élément à l'index idx dans la portée.

L'indice doit être compris dans l'intervalle, c'est-à-dire que idx >= 0 et idx < size(), sinon le comportement est indéfini.

Voir également front(), back(), size(), empty() et Const and Mutable Spans.

Documentation sur les variables membres

const std::size_t QSpan::extent

Le deuxième argument de modèle de QSpan<T, E>, c'est-à-dire E. Il s'agit de std::dynamic_extent pour variable-sized spans.

Note : Alors que toutes les autres tailles et index de QSpan utilisent qsizetype, cette variable, comme E, est en fait de type size_t, pour des raisons de compatibilité avec std::span et std::dynamic_extent.

Voir aussi size().

Non-membres apparentés

[noexcept, since 6.8] auto as_bytes(QSpan<T, E> s)

Retourne s en tant que QSpan<const std::byte, E'> dont size() est égal à s.size_bytes().

Si E est std::dynamic_extent, alors E' l'est aussi. Sinon, E' = E * sizeof(T).

Note : q20::dynamic_extent est un backport C++17 de C++20's std::dynamic_extent.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi as_writable_bytes(), size_bytes(), et Const and Mutable Spans.

[noexcept, since 6.8] auto as_writable_bytes(QSpan<T, E> s)

Retourne s en tant que QSpan<std::byte, E'> dont size() est égal à s.size_bytes().

Si E est std::dynamic_extent, alors E' l'est aussi. Sinon, E' = E * sizeof(T).

Note : q20::dynamic_extent est un backport C++17 de C++20's std::dynamic_extent.

Contraintes

Participe à la résolution de surcharge seulement si !std::is_const_v<T>.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi as_bytes(), size_bytes(), et Const and Mutable Spans.

© 2026 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.