QStringView类是QString API的只读子集,还提供有关UTF-16字符串的统一视图。
https://doc.qt.io/qt-6/qstringview.html
从Qt5.10开始提供,它的优势就是因为是只读没有深度复制等所以快,看以下范例即可:
#include <QCoreApplication>
void readname(QString &name) //address of is access of
{
name.insert(0,"Mr.");
qInfo() << "Changed" << name;
}
void readonly(QStringView name)
{
qInfo() << "name" << name.data() << name;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString firstname = "Bryan";
QString lastname = "Cairns";
//--- Copy and modification issues
//readname(firstname);
qInfo() << "Original" << firstname;
//---Read only, no copy
qInfo() << "name" << firstname.data() << firstname;
readonly(firstname);
//--- Basic parsing
QString fullname = firstname + " " + lastname;
foreach(QStringView part, QStringView(fullname).split(QChar(' ')))
{
qInfo() << "part" << part;
//Data types can get a bit annoying
if(part.startsWith(QStringView(firstname),Qt::CaseInsensitive))
{
qInfo() << "~First name detected~";
readonly(QStringView(firstname).mid(1,3));
}
}
return a.exec();
}
额外介绍下 foreach
在C++中并没有foreach关键字。QT自己增加了这一个关键字,就像slots和signals、emit等一样。可以理解为for的高级版。
在C#、Java等语言中,可以直接使用foreach,为语言自带关键字,用法相似。
foreach (varItem , Items)
varItem(variable)是容器Items(container)中的一个项,相当于:variable=container.item 。遍历会从头遍历到尾。
QStringList slt = {"abc", "def", "ghi"};
foreach(QString s , slt )
{
cout<<s<<endl;
}
// 输出结果为:
abc
def
ghi
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96482.html