Sur cette page

QAnyStringView Class

La classe QAnyStringView fournit une vue unifiée des chaînes de caractères Latin-1, UTF-8 ou UTF-16 avec un sous-ensemble en lecture seule de l'API QString. Plus d'informations...

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

Cette classe est fortement comparable.

Cette classe est fortement comparable à char16_t, QChar, const char16_t *, const char *, QByteArray, QByteArrayView, QString, QStringView, QUtf8StringView, et QLatin1StringView.

Remarque : toutes les fonctions de cette classe sont réentrantes.

Types publics

Fonctions publiques

QAnyStringView()
QAnyStringView(const Char &ch)
QAnyStringView(const Char (&)[N] string)
QAnyStringView(const Char *str)
QAnyStringView(const Container &str)
QAnyStringView(const QByteArray &str)
QAnyStringView(const QString &str)
QAnyStringView(std::nullptr_t)
QAnyStringView(const Char *first, const Char *last)
QAnyStringView(const Char *str, qsizetype len)
(since 6.9) QString arg(Args &&... args) const
QChar back() const
(since 6.5) void chop(qsizetype n)
(since 6.5) QAnyStringView chopped(qsizetype n) const
const void *data() const
bool empty() const
(since 6.5) QAnyStringView first(qsizetype n) const
QChar front() const
bool isEmpty() const
bool isNull() const
(since 6.5) QAnyStringView last(qsizetype n) const
qsizetype length() const
(since 6.8) qsizetype max_size() const
qsizetype size() const
qsizetype size_bytes() const
(since 6.8) QAnyStringView &slice(qsizetype pos, qsizetype n)
(since 6.8) QAnyStringView &slice(qsizetype pos)
(since 6.5) QAnyStringView sliced(qsizetype pos) const
(since 6.5) QAnyStringView sliced(qsizetype pos, qsizetype n) const
QString toString() const
(since 6.5) void truncate(qsizetype n)
decltype(auto) visit(Visitor &&v) const

Membres publics statiques

int compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QAnyStringView fromArray(const Char (&)[Size] string)
bool operator!=(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator<(const QAnyStringView &lhs, const QAnyStringView &rhs)
(since 6.7) QDebug operator<<(QDebug d, QAnyStringView s)
bool operator<=(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator==(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator>(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator>=(const QAnyStringView &lhs, const QAnyStringView &rhs)

Description détaillée

Un QAnyStringView fait référence à une portion contiguë d'une chaîne de caractères dont il n'est pas propriétaire. Il agit comme un type d'interface pour tous les types de chaînes, sans qu'il soit nécessaire de construire d'abord une QString.

Contrairement à QStringView et QUtf8StringView, QAnyStringView peut contenir des chaînes de l'un des encodages suivants : UTF-8, UTF-16 et Latin-1. Ce dernier est pris en charge parce que le Latin-1, contrairement à l'UTF-8, peut être efficacement comparé aux données UTF-16 : une différence de longueur signifie déjà que les chaînes ne peuvent pas être égales. Ce n'est pas le cas pour les comparaisons UTF-8/UTF-16, car l'UTF-8 est un encodage à longueur variable.

La chaîne peut être représentée comme un tableau (ou une structure de données compatible avec les tableaux telle que QString, std::basic_string, etc.) de char, char8_t, QChar, ushort, char16_t ou (sur les plates-formes, telles que Windows, où il s'agit d'un type 16 bits) wchar_t.

QAnyStringView est conçu comme un type d'interface ; son principal cas d'utilisation est celui d'un type de paramètre de fonction. Lorsque des QAnyStringViews sont utilisés comme variables automatiques ou membres de données, il convient de veiller à ce que les données de chaîne référencées (par exemple, appartenant à un QString) survivent au QAnyStringView sur tous les chemins de code, de peur que la vue de chaîne ne finisse par référencer des données supprimées.

Par exemple,

QAnyStringView str = funcReturningQString(); // return value is a temp

laisserait str faire référence à la donnée temporaire supprimée (ce qui constitue un comportement indéfini). Ceci est particulièrement vrai pour les constructeurs à un seul caractère :

QAnyStringView ch = u' '; // u' ' is a temporary
// oops, ch references deleted temporary

Dans les deux cas, la solution consiste à "épingler" le temporaire à une lvalue et à ne créer qu'ensuite une QAnyStringView à partir de celle-ci :

const auto r = funcReturningQString();
QAnyStringView str = r; // ok, `r` outlives `str`
const auto sp = u' ';
QAnyStringView ch = sp; // ok, `sp` outlives `ch`

Cependant, l'utilisation de QAnyStringView en tant que type d'interface est toujours sûre, à condition que la documentation de la fonction appelée ne demande pas une durée de vie plus longue :

void func(QAnyStringView s);
func(u' ');
func(functionReturningQString());

C'est pourquoi QAnyStringView prend en charge ces conversions en premier lieu.

Lorsqu'il est utilisé comme type d'interface, QAnyStringView permet à une seule fonction d'accepter une grande variété de sources de données de type chaîne. Une fonction acceptant QAnyStringView remplace ainsi cinq surcharges de fonction (prenant QString, (const QChar*, qsizetype), QUtf8StringView, QLatin1StringView (mais voir ci-dessus), et QChar), tout en permettant à encore plus de sources de données de chaînes d'être passées à la fonction, comme u8"Hello World", un littéral de chaîne char8_t.

Comme partout ailleurs dans Qt, QAnyStringView suppose que les données char sont encodées en UTF-8, à moins qu'elles ne soient présentées sous la forme d'une chaîne QLatin1StringView.

Depuis Qt 6.4, cependant, les chaînes UTF-8 littérales qui sont purement US-ASCII sont automatiquement stockées en Latin-1. Il s'agit d'une vérification au moment de la compilation, sans surcharge au moment de l'exécution. Cette fonctionnalité nécessite une compilation en C++20, ou avec un GCC récent.

Les QAnyStringViews doivent être transmis par valeur, et non par référence à une constante :

void myfun1(QAnyStringView sv);        // preferred
void myfun2(const QAnyStringView &sv); // compiles and works, but slower

QAnyStringView peut également être utilisé comme valeur de retour d'une fonction, mais ce n'est pas recommandé. QUtf8StringView ou QStringView conviennent mieux comme valeurs de retour de fonction. Si vous appelez une fonction renvoyant QAnyStringView, veillez à ne pas conserver le QAnyStringView plus longtemps que la fonction ne promet de maintenir en vie les données de la chaîne référencée. En cas de doute, obtenez une référence forte aux données en appelant toString() pour convertir le QAnyStringView en QString.

QAnyStringView est un type littéral.

Types de caractères compatibles

QAnyStringView accepte les chaînes sur une variété de types de caractères :

  • char (signés et non signés)
  • char8_t (C++20 uniquement)
  • char16_t
  • wchar_t (lorsqu'il s'agit d'un type 16 bits, par exemple Windows)
  • ushort
  • QChar

Les types de caractères 8 bits sont interprétés comme des données UTF-8 (sauf lorsqu'ils sont présentés comme QLatin1StringView) tandis que les types de caractères 16 bits sont interprétés comme des données UTF-16 dans l'ordre des octets de l'hôte (le même que QString).

Les types de caractères suivants ne sont pris en charge que par le constructeur d'un seul caractère :

  • QLatin1Char
  • QChar::SpecialCharacter
  • wchar_t (lorsqu'il s'agit d'un type 32 bits, c'est-à-dire Unix) (depuis la version 6.10)
  • char32_t

Ces types de caractères sont décomposés en interne en une séquence UTF-16 (en utilisant QChar::fromUcs4() pour le dernier).

Tailles et sous-chaînes

Toutes les tailles et positions dans les fonctions QAnyStringView sont exprimées en unités de code de l'encodage (c'est-à-dire que les paires de substituts UTF-16 comptent pour deux dans le cadre de ces fonctions, comme dans QString, et les séquences multi-octets UTF-8 comptent pour deux, trois ou quatre, en fonction de leur longueur).

Voir aussi Quelle classe de chaîne utiliser ?, QUtf8StringView, et QStringView.

Documentation sur les types de membres

QAnyStringView::difference_type

Alias de std::ptrdiff_t. Fourni à des fins de compatibilité avec le STL.

QAnyStringView::size_type

Alias de qsizetype. Fourni à des fins de compatibilité avec la STL.

Documentation des fonctions membres

[constexpr noexcept] QAnyStringView::QAnyStringView()

Construit une vue de chaîne de caractères nulle.

Voir aussi isNull().

[constexpr noexcept] template <typename Char, QAnyStringView::if_compatible_char<Char> = true> QAnyStringView::QAnyStringView(const Char &ch)

Construit une vue de chaîne sur le caractère unique ch. La longueur est généralement 1 (mais voir ci-dessous).

En général, vous devez supposer qu'un QAnyStringView ainsi créé commencera à référencer des données périmées à la fin de l'expression complète, lorsque les temporaires sont supprimés. Cela signifie que l'utiliser pour passer un seul caractère à une fonction QAnyStringView est correct et sûr (tant que la documentation de la fonction ne demande pas une durée de vie plus longue que l'appel initial) :

int to_int(QAnyStringView);
int res = to_int(u'9'); // OK, data stays around for the duration of the call

Mais garder l'objet plus longtemps est un comportement non défini :

QAnyStringView ch = u'9';
int res = to_int(ch); // (silent) ERROR: ch references deleted data

Si vous en avez besoin, préférez

const auto nine = u'9';
QAnyStringView ch(nine); // ok, references `nine`, which outlives `ch`
int res = to_int(ch); // 9

Ce qui précède est vrai pour tous les langages directement supportés par Compatible Character Types.

Si ch n'est pas l'un de ces types, mais convertit simplement en QChar, par exemple QChar::SpecialCharacter ou QLatin1Char, le QAnyStringView se liera à un objet temporaire qui aura été supprimé à la fin de l'expression complète, comme dans le deuxième exemple.

Si ch ne peut pas être représenté dans une seule unité de code UTF-16 (par exemple parce qu'il s'agit d'une valeur char32_t ), ce constructeur décompose ch en deux unités de code UFT-16. Le QAnyStringView résultant aura un size() de 2 dans ce cas, et le tampon temporaire dans lequel la décomposition est stockée est supprimé à la fin de l'expression complète, semblable à

[](char32_t ch, auto &&tmp = QChar::fromUcs4(ch)) {
    return QAnyStringView(tmp);
}

La version sûre équivalente dans ce cas serait

const auto decomposed = QChar::fromUcs4(ch);
QAnyStringView ch(decomposed);

Voir également QChar::fromUcs4() et Compatible Character Types.

[constexpr noexcept] template <typename Char, size_t N> QAnyStringView::QAnyStringView(const Char (&)[N] string)

Construit une vue de chaîne sur le littéral de chaîne de caractères string. La vue couvre le tableau jusqu'à ce que le premier Char(0) soit rencontré, ou jusqu'à N, selon ce qui arrive en premier. Si vous avez besoin du tableau complet, utilisez plutôt fromArray().

string doit rester valide pendant toute la durée de vie de cet objet de vue de chaîne.

Contraintes

Ne participe à la résolution de surcharge que si string est un tableau réel et que Char est un type de caractère compatible.

Voir également Compatible Character Types.

[constexpr noexcept] template <typename Char> QAnyStringView::QAnyStringView(const Char *str)

Construit une vue de chaîne sur str. La longueur est déterminée en recherchant le premier Char(0).

str La longueur doit rester valide pendant toute la durée de vie de cet objet "string view".

Transmettre nullptr en tant que str est sans danger et produit une vue de chaîne nulle.

Contraintes

Participe à la résolution des surcharges uniquement si str n'est pas un tableau et si Char est un type de caractère compatible.

Voir aussi isNull() et Compatible Character Types.

[constexpr noexcept] template <typename Container, QAnyStringView::if_compatible_container<Container> = true> QAnyStringView::QAnyStringView(const Container &str)

Construit une vue de chaîne sur str. La longueur est tirée de std::size(str).

std::data(str) doit rester valide pendant toute la durée de vie de cet objet "string view".

La vue de chaîne sera vide si et seulement si std::size(str) == 0. Il n'est pas précisé si ce constructeur peut aboutir à une vue de chaîne nulle (std::data(str) devrait renvoyer nullptr pour cela).

Contraintes

Ne participe à la résolution de surcharge que si Container est un conteneur avec un type de caractère compatible avec value_type.

Voir aussi isNull() et isEmpty().

[noexcept] QAnyStringView::QAnyStringView(const QByteArray &str)

Construit une vue de chaîne sur str. Les données contenues dans str sont interprétées en UTF-8.

str.data() doit rester valide pendant toute la durée de vie de cet objet "string view".

La vue de chaîne sera nulle si et seulement si str.isNull().

[noexcept] QAnyStringView::QAnyStringView(const QString &str)

Construit une vue de chaîne sur str.

str.data() doit rester valide pendant toute la durée de vie de cet objet "string view".

La vue de chaîne sera nulle si et seulement si str.isNull().

[constexpr noexcept] QAnyStringView::QAnyStringView(std::nullptr_t)

Construit une vue de chaîne de caractères nulle.

Voir aussi isNull().

[constexpr] template <typename Char, QAnyStringView::if_compatible_char<Char> = true> QAnyStringView::QAnyStringView(const Char *first, const Char *last)

Construit une vue de chaîne sur first avec la longueur (last - first).

La plage [first,last) doit rester valide pendant toute la durée de vie de cet objet "string view".

Transmettre nullptr en tant que first est sûr si last est aussi nullptr, et résulte en une vue de chaîne nulle.

Le comportement est indéfini si last précède first, ou si first est nullptr et last ne l'est pas.

Contraintes

Participe à la résolution des surcharges uniquement si Char est un type de caractère compatible.

Voir aussi isNull() et Compatible Character Types.

[constexpr] template <typename Char, QAnyStringView::if_compatible_char<Char> = true> QAnyStringView::QAnyStringView(const Char *str, qsizetype len)

Construit une vue de chaîne sur str avec la longueur len.

La plage [str,len) doit rester valide pendant toute la durée de vie de cet objet "string view".

Transmettre nullptr en tant que str est sûr si len est également 0, et résulte en une vue de chaîne nulle.

Le comportement est indéfini si len est négatif ou, lorsqu'il est positif, si str est nullptr.

Contraintes

Ne participe à la résolution des surcharges que si Char est un type de caractère compatible.

Voir également isNull() et Compatible Character Types.

[since 6.9] template <typename... Args> QString QAnyStringView::arg(Args &&... args) const

Remplace les occurrences de %N dans cette chaîne par l'argument correspondant de args. Les arguments ne sont pas positionnels : le premier des args remplace le %N par le N le plus bas (tous), le deuxième des args le %N par le N le plus bas suivant, etc.

Args peut consister en tout ce qui se convertit implicitement en QAnyStringView.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi QString::arg(Args&&...).

[constexpr] QChar QAnyStringView::back() const

Renvoie le dernier caractère de la vue de la chaîne de caractères.

Cette fonction est fournie pour la compatibilité STL.

Attention : L'appel de cette fonction sur une vue de chaîne vide constitue un comportement indéfini.

Voir aussi front() et Sizes and Sub-Strings.

[constexpr, since 6.5] void QAnyStringView::chop(qsizetype n)

Tronque cette vue de la chaîne de caractères par n points de code.

Identique à *this = first(size() - n).

Remarque : le comportement est indéfini lorsque n < 0 ou n > size().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi sliced(), first(), last(), chopped(), truncate(), slice(), et Sizes and Sub-Strings.

[constexpr, since 6.5] QAnyStringView QAnyStringView::chopped(qsizetype n) const

Renvoie la sous-chaîne de longueur size() - n commençant au début de cet objet.

Identique à first(size() - n).

Remarque : le comportement est indéfini lorsque n < 0 ou n > size().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi sliced(), first(), last(), chop(), truncate(), slice() et Sizes and Sub-Strings.

[static noexcept] int QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive)

Compare la vue de chaîne lhs avec la vue de chaîne rhs et renvoie un nombre entier négatif si lhs est inférieur à rhs, un nombre entier positif s'il est supérieur à rhs, et zéro s'ils sont égaux.

Si cs est Qt::CaseSensitive (par défaut), la comparaison est sensible à la casse ; sinon, la comparaison est insensible à la casse.

Voir aussi operator==(), operator<() et operator>().

[constexpr noexcept] const void *QAnyStringView::data() const

Renvoie un pointeur constant sur le premier caractère de la vue de la chaîne.

Note : Le tableau de caractères représenté par la valeur de retour n'est pas à terminaison nulle.

Voir aussi size_bytes().

[constexpr noexcept] bool QAnyStringView::empty() const

Renvoie si cette vue de chaîne est vide, c'est-à-dire si size() == 0.

Cette fonction est fournie à des fins de compatibilité STL.

Voir également isEmpty(), isNull() et size().

[constexpr, since 6.5] QAnyStringView QAnyStringView::first(qsizetype n) const

Renvoie une vue de chaîne qui contient les premiers n points de code de cette vue de chaîne.

Remarque : le comportement est indéfini lorsque n < 0 ou n > size().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi last(), sliced(), chopped(), chop(), truncate(), slice() et Sizes and Sub-Strings.

[static constexpr noexcept] template < typename Char, size_t Size, QAnyStringView::if_compatible_char<Char> = true > QAnyStringView QAnyStringView::fromArray(const Char (&)[Size] string)

Construit une vue de chaîne sur le littéral de chaîne de caractères complet string, y compris toute fin de chaîne Char(0). Si vous ne voulez pas que le terminateur null soit inclus dans la vue, vous pouvez chop() l'enlever lorsque vous êtes certain qu'il se trouve à la fin. Vous pouvez également utiliser la surcharge du constructeur en prenant un littéral de tableau qui créera une vue jusqu'au premier terminateur nul dans les données, mais sans l'inclure.

string doit rester valide pendant toute la durée de vie de cet objet de vue de chaîne.

Cette fonction fonctionnera avec n'importe quel littéral de tableau si Char est un type de caractère compatible. Les types de caractères compatibles sont les suivants : QChar, ushort, char16_t et (sur les plates-formes, telles que Windows, où il s'agit d'un type 16 bits) wchar_t.

[constexpr] QChar QAnyStringView::front() const

Renvoie le premier caractère de la vue de la chaîne de caractères.

Cette fonction est fournie pour la compatibilité STL.

Attention : L'appel de cette fonction sur une vue de chaîne vide constitue un comportement indéfini.

Voir aussi back() et Sizes and Sub-Strings.

[constexpr noexcept] bool QAnyStringView::isEmpty() const

Renvoie si cette vue de chaîne est vide - c'est-à-dire si size() == 0.

Cette fonction est fournie à des fins de compatibilité avec d'autres conteneurs Qt.

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

[constexpr noexcept] bool QAnyStringView::isNull() const

Retourne si cette vue de chaîne est nulle - c'est-à-dire si data() == nullptr.

Cette fonction est fournie à des fins de compatibilité avec d'autres conteneurs Qt.

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

[constexpr, since 6.5] QAnyStringView QAnyStringView::last(qsizetype n) const

Renvoie une vue de chaîne qui contient les derniers n points de code de cette vue de chaîne.

Remarque : le comportement est indéfini lorsque n < 0 ou n > size().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi first(), sliced(), chopped(), chop(), truncate(), slice() et Sizes and Sub-Strings.

[constexpr noexcept] qsizetype QAnyStringView::length() const

Identique à size().

Cette fonction est fournie à des fins de compatibilité avec d'autres conteneurs Qt.

Voir aussi size().

[constexpr noexcept, since 6.8] qsizetype QAnyStringView::max_size() const

Cette fonction est fournie à des fins de compatibilité STL.

Elle renvoie le nombre maximal d'éléments que la vue chaîne peut théoriquement représenter. En pratique, ce nombre peut être beaucoup plus petit, limité par la quantité de mémoire disponible dans le système.

Note : La valeur retournée est calculée en fonction du type de caractère actuellement utilisé, de sorte que l'appel de cette fonction à deux vues différentes peut donner des résultats différents.

Cette fonction a été introduite dans Qt 6.8.

[constexpr noexcept] qsizetype QAnyStringView::size() const

Renvoie la taille de cette vue de chaîne, en points de code de l'encodage.

Voir aussi empty(), isEmpty(), isNull(), size_bytes(), et Sizes and Sub-Strings.

[constexpr noexcept] qsizetype QAnyStringView::size_bytes() const

Renvoie la taille de cette vue de chaîne, mais en octets, pas en points de code.

Vous pouvez utiliser cette fonction avec data() pour le hachage ou la sérialisation.

Cette fonction est fournie pour la compatibilité STL.

Voir aussi size() et data().

[constexpr, since 6.8] QAnyStringView &QAnyStringView::slice(qsizetype pos, qsizetype n)

Modifie cette vue de chaîne pour qu'elle commence à la position pos et s'étende aux points de code n.

Remarque : le comportement est indéfini lorsque pos < 0, n < 0 ou pos + n > size().

Cette fonction a été introduite dans Qt 6.8.

Voir aussi sliced(), first(), last(), chopped(), chop(), truncate(), et Sizes and Sub-Strings.

[constexpr, since 6.8] QAnyStringView &QAnyStringView::slice(qsizetype pos)

Modifie cette vue de chaîne pour qu'elle commence à la position pos et s'étende jusqu'à la fin.

Remarque : le comportement est indéfini lorsque pos < 0 ou pos > size().

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi sliced(), first(), last(), chopped(), chop(), truncate() et Sizes and Sub-Strings.

[constexpr, since 6.5] QAnyStringView QAnyStringView::sliced(qsizetype pos) const

Renvoie une vue de chaîne de caractères commençant à la position pos dans cet objet et s'étendant jusqu'à son extrémité.

Remarque : le comportement est indéfini lorsque pos < 0 ou pos > size().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi first(), last(), chopped(), chop(), truncate(), slice(), et Sizes and Sub-Strings.

[constexpr, since 6.5] QAnyStringView QAnyStringView::sliced(qsizetype pos, qsizetype n) const

Renvoie une vue de chaîne contenant n points de code de cette vue de chaîne, commençant à la position pos.

Remarque : le comportement est indéfini lorsque pos < 0, n < 0, ou pos + n > size().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi first(), last(), chopped(), chop(), truncate(), slice() et Sizes and Sub-Strings.

QString QAnyStringView::toString() const

Renvoie une copie profonde des données de cette vue de chaîne sous forme de QString.

La valeur de retour sera un null QString si et seulement si cette vue de chaîne est null.

[constexpr, since 6.5] void QAnyStringView::truncate(qsizetype n)

Tronque cette vue de la chaîne à n points de code.

Identique à *this = first(n).

Remarque : le comportement est indéfini lorsque n < 0 ou n > size().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi sliced(), first(), last(), chopped(), chop() et Sizes and Sub-Strings.

[constexpr] template <typename Visitor> decltype(auto) QAnyStringView::visit(Visitor &&v) const

Appelle v avec QUtf8StringView, QLatin1String, ou QStringView, en fonction de l'encodage des données de la chaîne que cette vue de chaîne référence.

C'est ainsi que la plupart des fonctions utilisant QAnyStringView se transforment en fonctions par encodage :

void processImpl(QLatin1String s) { ~~~ }
void processImpl(QUtf8StringView s) { ~~~ }
void processImpl(QStringView s) { ~~~ }

void process(QAnyStringView s)
{
    s.visit([](auto s) { processImpl(s); });
}

Ici, nous réutilisons le même nom, s, à la fois pour l'objet QAnyStringView et pour le paramètre de la lambda. Il s'agit d'un code idiomatique qui permet de suivre l'identité des objets lors des appels à visit(), par exemple dans des situations plus complexes telles que les suivantes

bool equal(QAnyStringView lhs, QAnyStringView rhs)
{
    // assuming operator==(QAnyStringView, QAnyStringView) didn't, yet, exist:
    return lhs.visit([rhs](auto lhs) {
        rhs.visit([lhs](auto rhs) {
            return lhs == rhs;
        });
    });
}

visit() exige que toutes les instanciations de lambda aient le même type de retour. S'ils diffèrent, vous obtenez une erreur de compilation, même s'il existe un type commun. Pour résoudre ce problème, vous pouvez utiliser des types de retour explicites dans la lambda ou effectuer une conversion dans les instructions de retour :

// wrong:
QAnyStringView firstHalf(QAnyStringView input)
{
    return input.visit([](auto input) {   // ERROR: lambdas return different types
        return input.sliced(0, input.size() / 2);
    });
}
// correct:
QAnyStringView firstHalf(QAnyStringView input)
{
    return input.visit([](auto input) -> QAnyStringView { // OK, explicit return type
        return input.sliced(0, input.size() / 2);
    });
}
// also correct:
QAnyStringView firstHalf(QAnyStringView input)
{
    return input.visit([](auto input) {
        return QAnyStringView(input.sliced(0, input.size() / 2)); // OK, cast to common type
    });
}

Non-membres apparentés

[since 6.7] QDebug operator<<(QDebug d, QAnyStringView s)

Produit s dans le flux de débogage d.

Si d.quotedString() est true, indique l'encodage de la chaîne. Si vous ne voulez que les données de la chaîne, utilisez visit() comme ceci :

s.visit([&d) (auto s) { d << s; });

Cette fonction a été introduite dans Qt 6.7.

Voir aussi QAnyStringView::visit().

[noexcept] bool operator==(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator!=(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator<=(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator>=(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator<(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator>(const QAnyStringView &lhs, const QAnyStringView &rhs)

Opérateurs qui comparent lhs à rhs.

Voir aussi compare().

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