Obsolete Members for <QtTypeTraits>

Die folgenden Mitglieder der Klasse <QtTypeTraits> sind veraltet. Sie werden bereitgestellt, um alten Quellcode funktionsfähig zu halten. Wir raten dringend davon ab, sie in neuem Code zu verwenden.

Funktionen

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

Dokumentation der Funktionen

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

Diese Funktion ist seit 6.6 veraltet. Wir raten dringend davon ab, sie in neuem Code zu verwenden.

Verwenden Sie stattdessen std::as_const().

Gibt t zurück, gecastet nach const T.

Diese Funktion ist eine Qt-Implementierung von C++17's std::as_const(), eine Cast-Funktion wie std::move(). Aber während std::move() lWerte in rWerte umwandelt, verwandelt diese Funktion nicht-konstante lWerte in konstante lWerte. Wie std::as_const() funktioniert sie nicht bei rWerten, da sie für rWerte nicht effizient implementiert werden kann, ohne Verweise (dangling references) zu hinterlassen.

Seine Hauptanwendung in Qt ist es, zu verhindern, dass sich implizit freigegebene Qt-Container ablösen:

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

Natürlich hätte man in diesem Fall s von vornherein als const deklarieren können (und wahrscheinlich auch sollen):

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

aber oft ist das nicht einfach möglich.

Es ist wichtig zu beachten, dass qAsConst() sein Argument nicht kopiert, sondern nur eine const_cast<const T&>(t) durchführt. Dies ist auch der Grund, warum es für rvalues nicht funktioniert: Die zurückgegebene Referenz würde zu schnell veralten. Während dies also funktioniert (aber das zurückgegebene Objekt loslöst):

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

würde dies nicht funktionieren:

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

Um zu verhindern, dass dieses Konstrukt kompiliert wird (und zur Laufzeit fehlschlägt), hat qAsConst() eine zweite, gelöschte Überladung, die sich an rvalues bindet.

Hinweis: Sie können die Funktion qAsConst() nicht verfügbar machen, indem Sie das Makro QT_NO_QASCONST definieren.

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

Diese Funktion ist seit 6.6 veraltet. Wir raten dringend davon ab, sie in neuem Code zu verwenden.

Dies ist eine überladene Funktion.

Diese Überladung wird gelöscht, um eine "Dangling Reference" in Code wie

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

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