Obsolete Members for <QtTypeTraits>

Les membres suivants de la classe ` <QtTypeTraits> ` sont obsolètes. Ils sont fournis afin de garantir la compatibilité avec l'ancien code source. Nous déconseillons fortement de les utiliser dans du nouveau code.

Fonctions

(deprecated in 6.6) typename std::add_const<T>::type &qAsConst(T &t)
(deprecated in 6.6) void qAsConst(const T &&t)

Documentation des fonctions

[constexpr noexcept, deprecated in 6.6] template <typename T> typename std::add_const<T>::type &qAsConst(T &t)

Cette fonction est obsolète depuis la version 6.6. Nous vous déconseillons fortement de l'utiliser dans du nouveau code.

Utilisez plutôt std::as_const().

Renvoie l't, converti en const T.

Cette fonction est une implémentation Qt de std::as_const() de C++17, une fonction de conversion similaire à std::move(). Mais alors que std::move() transforme les l-valeurs en r-valeurs, cette fonction transforme les l-valeurs non const en l-valeurs const. Tout comme std::as_const(), elle ne fonctionne pas sur les r-valeurs, car elle ne peut pas être implémentée efficacement pour les r-valeurs sans laisser de références pendantes.

Son utilisation principale dans Qt est d’empêcher les conteneurs Qt partagés implicitement de se détacher :

    QString s = "...";
    for (QChar ch : s) // detaches 's' (performs a deep-copy if 's' was shared)
        process(ch);
    for (QChar ch : qAsConst(s)) // ok, no detach attempt
        process(ch);

Bien sûr, dans ce cas, vous auriez pu (et auriez probablement dû) déclarer ` s ` comme ` const ` dès le départ :

    const QString s = "...";
    for (QChar ch : s) // ok, no detach attempt on const objects
        process(ch);

mais cela n’est souvent pas facile à réaliser.

Il est important de noter que `qAsConst()` ne copie pas son argument, elle effectue simplement une ` const_cast<const T&>(t)`. C’est également la raison pour laquelle elle est conçue pour échouer avec les valeurs r : la référence renvoyée deviendrait obsolète trop rapidement. Ainsi, alors que ceci fonctionne (mais détache l’objet renvoyé) :

    for (QChar ch : funcReturningQString())
        process(ch); // OK, the returned object is kept alive for the loop's duration

cela ne fonctionnerait pas :

    for (QChar ch : qAsConst(funcReturningQString()))
        process(ch); // ERROR: ch is copied from deleted memory

Pour empêcher cette construction de se compiler (et d’échouer lors de l’exécution), qAsConst() dispose d’une deuxième surcharge, supprimée, qui se lie aux valeurs r.

Remarque : vous pouvez désactiver la fonction qAsConst() en définissant la macro ` QT_NO_QASCONST `.

[delete, deprecated in 6.6] template <typename T> void qAsConst(const T &&t)

Cette fonction est obsolète depuis la version 6.6. Nous déconseillons fortement de l'utiliser dans du nouveau code.

Cette surcharge a été supprimée afin d'éviter une référence pendante dans du code tel que

    for (QChar ch : qAsConst(funcReturningQString()))
        process(ch); // ERROR: ch is copied from deleted memory

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

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