Obsolete Members for <QtTypeTraits>
<QtTypeTraits> 클래스의 다음 멤버는 더 이상 사용되지 않습니다. 이들은 이전 소스 코드의 작동을 유지하기 위해 제공됩니다. 새 코드에서는 사용하지 않는 것이 좋습니다.
함수
(deprecated in 6.6) typename std::add_const<T>::type & | qAsConst(T &t) |
(deprecated in 6.6) void | qAsConst(const T &&t) |
함수 문서
[constexpr noexcept, deprecated in 6.6]
template <typename T> typename std::add_const<T>::type &qAsConst(T &t)
이 함수는 6.6부터 더 이상 사용되지 않습니다. 새 코드에서 이 함수를 사용하지 않는 것이 좋습니다.
대신 std::as_const()를 사용하세요.
const T
으로 형변환된 t 을 반환합니다.
이 함수는 std::move()와 같은 형 변환 함수인 C++17의 std::as_const()를 Qt로 구현한 것입니다. 하지만 std::move()가 l값을 r값으로 변환하는 반면, 이 함수는 const가 아닌 l값을 const l값으로 변환합니다. std::as_const()와 마찬가지로, 이 함수는 매달린 참조를 남기지 않고는 r값에 대해 효율적으로 구현할 수 없기 때문에 r값에서는 작동하지 않습니다.
Qt에서 이 함수의 주요 용도는 암시적으로 공유된 Qt 컨테이너가 분리되는 것을 방지하는 것입니다:
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);
물론, 이 경우 s
을 const
으로 선언할 수 있고, 그래야만 합니다:
로 선언할 수도 있지만, 그렇게 하는 것이 쉽지 않은 경우가 많습니다.
qAsConst()는 인수를 복사하지 않고 const_cast<const T&>(t)
를 수행한다는 점에 유의하는 것이 중요합니다. 이것이 바로 이 함수가 r값에 대해 실패하도록 설계된 이유이기도 합니다: 반환된 참조가 너무 빨리 부실해질 수 있기 때문입니다. 따라서 이것은 작동하지만(하지만 반환된 객체를 분리합니다):
for (QChar ch : funcReturningQString()) process(ch); // OK, the returned object is kept alive for the loop's duration
이것은 작동하지 않습니다:
for (QChar ch : qAsConst(funcReturningQString())) process(ch); // ERROR: ch is copied from deleted memory
이 구조체가 컴파일되지 않도록(그리고 런타임에 실패하지 않도록), qAsConst()에는 두 번째 삭제된 오버로드가 있으며, 이 오버로드는 rvalues에 바인딩됩니다.
참고: QT_NO_QASCONST 매크로를 정의하여 qAsConst() 함수를 사용할 수 없게 만들 수 있습니다.
[deprecated in 6.6]
template <typename T> void qAsConst(const T &&t)
이 함수는 6.6부터 더 이상 사용되지 않습니다. 새 코드에서 이 함수를 사용하지 않는 것이 좋습니다.
이 함수는 과부하가 걸린 함수입니다.
이 과부하 함수는 다음과 같은 코드에서 매달린 참조를 방지하기 위해 삭제됩니다.
© 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.