废弃的成员函数:QtTypeTraits
以下 typeof <QtTypeTraits> 类的成员已被弃用。 它们提供以确保旧源代码继续工作。我们强烈建议在新的代码中避免使用它们。
函数
函数文档
[constexpr noexcept, deprecated in 6.6]
template <typename T> typename std::add_const<T>::type &qAsConst(T &t)
此函数自 6.6 起已弃用。我们强烈建议在新的代码中避免使用它。
请使用 std::as_const() 代替。
返回 t 的 const T
类型。
这是 Qt 对 C++17's std::as_const() 的实现,它类似于 std::move() 的转换函数。但是,由于没有保留引用,它不能有效地为右值实现,因此它不支持右值。
在 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)
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() 具有一个其次、被删除的重载版本,用于绑定到右值。
此函数自 6.6 起已弃用。我们强烈建议在新的代码中避免使用它。
[deprecated in 6.6]
template <typename T> void qAsConst(const T &&t)
这是一个重载函数。
© 2024 Qt公司有限公司。本文件中包含的文档贡献者是各自版权的所有者。本文件中提供的文档是根据自由软件开发基金会发布的GNU自由文档许可版本1.3许可的。Qt及其相关标志是芬兰以及全世界其他国家的Qt公司的商标。所有其他商标均为各自所有者的财产。