Obsolete Members for <QtTypeTraits>
Los siguientes miembros de la clase <QtTypeTraits> son obsoletos. Se proporcionan para que el código fuente antiguo siga funcionando. Desaconsejamos su uso en código nuevo.
Funciones
(deprecated in 6.6) typename std::add_const<T>::type & | qAsConst(T &t) |
(deprecated in 6.6) void | qAsConst(const T &&t) |
Documentación de funciones
[constexpr noexcept, deprecated in 6.6] template <typename T> typename std::add_const<T>::type &qAsConst(T &t)
Esta función está obsoleta desde la versión 6.6. Desaconsejamos su uso en código nuevo.
Utilice std::as_const() en su lugar.
Devuelve t convertido a const T.
Esta función es una implementación de Qt de std::as_const() de C++17, una función de conversión como std::move(). Pero mientras que std::move() convierte lvalues en rvalues, esta función convierte lvalues no-const en lvalues const. Al igual que std::as_const(), no funciona con rvalues, porque no puede implementarse eficientemente para rvalues sin dejar referencias colgantes.
Su uso principal en Qt es evitar que los contenedores Qt implícitamente compartidos se separen:
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);
Por supuesto, en este caso, podrías (y probablemente deberías) haber declarado s como const en primer lugar:
pero a menudo eso no es fácilmente posible.
Es importante tener en cuenta que qAsConst() no copia su argumento, sólo realiza una const_cast<const T&>(t). Ésta es también la razón por la que está diseñada para fallar para rvalues: La referencia devuelta quedaría obsoleta demasiado pronto. Así que mientras esto funciona (pero separa el objeto devuelto):
for (QChar ch : funcReturningQString()) process(ch); // OK, the returned object is kept alive for the loop's duration
esto no:
for (QChar ch : qAsConst(funcReturningQString())) process(ch); // ERROR: ch is copied from deleted memory
Para evitar que esta construcción se compile (y falle en tiempo de ejecución), qAsConst() tiene una segunda sobrecarga, eliminada, que se vincula a rvalues.
Nota: Puede hacer que la función qAsConst() no esté disponible definiendo la macro QT_NO_QASCONST.
[deprecated in 6.6] template <typename T> void qAsConst(const T &&t)
Esta función está obsoleta desde la versión 6.6. Desaconsejamos su uso en código nuevo.
Esta sobrecarga se elimina para evitar una referencia colgante en código como
for (QChar ch : qAsConst(funcReturningQString())) process(ch); // ERROR: ch is copied from deleted memory
Esta es una función sobrecargada.
© 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.