AFAICS here http://qt-project.org/forums/viewthread/16144,QStringBuilder没有运算符%=。
但是,如果你想维持循环,你可以尝试这样的事情:
#include <QStringBuilder>
#include <QStringList>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QStringList words;
words << "a1" << "a2" << "a3";
QString testString;
for (auto it = words.constBegin(); it != words.constEnd(); ++it)
{
testString = testString % *it % " ";
}
cout << testString.toStdString() << endl;
}
其中还提到了QT_USE_QSTRINGBUILDER
宏,将所有+
用法成%
,前提是不会在代码的其他地方产生问题。
EDIT:
根据马文的评论,我认为我应该对我的答案添加一些澄清:
这个答案显示了在循环中显式使用 QStringBuilder 和运算符% 的一种方法。 QStringBuilder 是为了优化连接表达式而创建的,这种优化是通过消除对临时变量的需要、计算连接字符串的总大小并一次分配它来实现的(显然,这只能在字符串的“末尾”完成)表达)。
这意味着它的最佳使用可能不是在循环中(例如上面的代码)。然而,即使如此,它也会为您提供某种优化,从下面两个版本的 gprof 和 Measure-Command 输出中可以看出。
版本 1 - QStringBuilder 和运算符%(gprof 累积秒数:0.46;PowerShell Measure-Command:5:23s)
for (auto it = words.constBegin(); it != words.constEnd(); ++it)
{
for (int i = 0; i < 100000; ++i)
{
testString = testString % *it % " ";
}
}
版本 2 - Qstring 和运算符+(gprof 累积秒数:0.61;PowerShell Measure-Command:10:47s)
for (auto it = words.constBegin(); it != words.constEnd(); ++it)
{
for (int i = 0; i < 100000; ++i)
{
testString = testString + *it + " ";
}
}
所以,我想说,使用 QStringBuilder 和 operator% 可能不会让你明显变得更糟(请注意,上面的值有点偏差,除非你的应用程序实际上在没有任何 I/O 的情况下执行数千个串联)。但是,像往常一样,您可以衡量执行时间并决定什么最适合您。