Obsolete Members for <QtTypeTraits>
Les membres suivants de la classe <QtTypeTraits> sont obsolètes. Ils sont fournis pour permettre aux anciens codes sources de continuer à fonctionner. Il est fortement déconseillé de les utiliser dans un 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. Il est fortement déconseillé de l'utiliser dans un nouveau code.
Utilisez std::as_const() à la place.
Retourne t, transformé en const T.
Cette fonction est une implémentation Qt de la fonction std::as_const() de C++17, une fonction cast comme std::move(). Mais alors que std::move() transforme les lvalues en rvalues, cette fonction transforme les lvalues non-const en lvalues const. Comme std::as_const(), elle ne fonctionne pas sur les valeurs r, parce qu'elle ne peut pas être implémentée efficacement pour les valeurs r sans laisser des références pendantes.
Sa principale utilisation dans Qt est d'empêcher les conteneurs Qt implicitement partagés 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 probablement dû) déclarer s comme const en premier lieu :
mais cela n'est pas toujours possible.
Il est important de noter que qAsConst() ne copie pas son argument, il effectue simplement une const_cast<const T&>(t). C'est aussi la raison pour laquelle il est conçu pour échouer pour les rvalues : La référence renvoyée serait périmée trop tôt. Ainsi, alors que cette méthode fonctionne (mais détache l'objet retourné) :
for (QChar ch : funcReturningQString()) process(ch); // OK, the returned object is kept alive for the loop's duration
ce n'est pas le cas :
for (QChar ch : qAsConst(funcReturningQString())) process(ch); // ERROR: ch is copied from deleted memory
Pour empêcher cette construction de compiler (et d'échouer à l'exécution), qAsConst() a une deuxième surcharge, supprimée, qui se lie à rvalues.
Remarque : vous pouvez rendre la fonction qAsConst() indisponible en définissant la macro QT_NO_QASCONST.
[deprecated in 6.6] template <typename T> void qAsConst(const T &&t)
Cette fonction est obsolète depuis la version 6.6. Il est fortement déconseillé de l'utiliser dans un nouveau code.
Cette surcharge est supprimée pour éviter une référence pendante dans un 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.