Obsolete Members for <QtTypeTraits>
Die folgenden Mitglieder der Klasse „ <QtTypeTraits> “ sind veraltet. Sie werden bereitgestellt, damit alter Quellcode weiterhin funktioniert. 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) |
Funktionsdokumentation
[constexpr noexcept, deprecated in 6.6] template <typename T> typename std::add_const<T>::type &qAsConst(T &t)
Diese Funktion ist seit Version 6.6 veraltet. Wir raten dringend davon ab, sie in neuem Code zu verwenden.
Verwenden Sie stattdessen std::as_const().
Gibt „ t “ zurück, umgewandelt in „ const T “.
Diese Funktion ist eine Qt-Implementierung von std::as_const() aus C++17, einer Umwandlungsfunktion ähnlich wie std::move(). Während std::move() jedoch L-Werte in R-Werte umwandelt, wandelt diese Funktion nicht-konstante L-Werte in konstante L-Werte um. Wie std::as_const() funktioniert sie nicht mit r-Werten, da sie für r-Werte nicht effizient implementiert werden kann, ohne dass dabei hängende Referenzen entstehen.
Ihr Hauptzweck in Qt besteht darin, zu verhindern, dass implizit gemeinsam genutzte Qt-Container getrennt werden:
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ättest du in diesem Fall „ s “ von vornherein als „ const “ deklarieren können (und wahrscheinlich auch sollen):
aber oft ist das nicht ohne Weiteres möglich.
Es ist wichtig zu beachten, dass `qAsConst()` sein Argument nicht kopiert, sondern lediglich eine ` const_cast<const T&>(t)` durchführt. Dies ist auch der Grund, warum die Funktion bei R-Werten fehlschlägt: Die zurückgegebene Referenz würde zu schnell veralten. Während dies also funktioniert (aber das zurückgegebene Objekt trennt):
for (QChar ch : funcReturningQString())
process(ch); // OK, the returned object is kept alive for the loop's durationwürde dies nicht funktionieren:
for (QChar ch : qAsConst(funcReturningQString()))
process(ch); // ERROR: ch is copied from deleted memoryUm zu verhindern, dass diese Konstruktion kompiliert wird (und zur Laufzeit fehlschlägt), verfügt `qAsConst()` über eine zweite, nicht mehr verwendete Überladung, die an r-Werte bindet.
Hinweis: Sie können die Funktion `qAsConst()` deaktivieren, indem Sie das Makro ` QT_NO_QASCONST ` definieren.
[delete, deprecated in 6.6] template <typename T> void qAsConst(const T &&t)
Diese Funktion ist seit Version 6.6 veraltet. Wir raten dringend davon ab, sie in neuem Code zu verwenden.
Diese Überladung wurde entfernt, um eine „Dangling Reference“ in Code wie dem folgenden zu verhindern
for (QChar ch : qAsConst(funcReturningQString()))
process(ch); // ERROR: ch is copied from deleted memoryDies ist eine überladene Funktion.
© 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.