AFAICS here、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
マクロについても言及されています。+
%
編集:
Marvin のコメントに照らして、回答にいくつかの説明を追加する必要があると思います。この回答は、ループで QStringBuilder と operator% を明示的に使用する 1 つの方法を示しています。QStringBuilder は、連結式を最適化するために作成されました。その最適化は、一時変数の必要性を排除し、連結された文字列の合計サイズを計算して一度にすべて割り当てることによって実現されます (明らかに、これは文字列の「最後」でのみ実行できます)。表現)。
これは、その最適な使用法がおそらくループ内ではないことを意味します (上記のコードなど)。ただし、その場合でも、以下の 2 つのバージョンの gprof と Measure-Command の出力からわかるように、ある種の最適化が行われます。
バージョン 1 - QStringBuilder および operator% (gprof 累積秒: 0.46; PowerShell Measure-Command: 5:23 秒)
for (auto it = words.constBegin(); it != words.constEnd(); ++it)
{
for (int i = 0; i < 100000; ++i)
{
testString = testString % *it % " ";
}
}
バージョン 2 - Qstring および operator+ (gprof 累積秒: 0.61; PowerShell Measure-Command: 10:47 秒)
for (auto it = words.constBegin(); it != words.constEnd(); ++it)
{
for (int i = 0; i < 100000; ++i)
{
testString = testString + *it + " ";
}
}
したがって、QStringBuilder と operator% を使用しても、おそらく著しく悪化することはないと思います (アプリが実際に I/O なしで何千もの連結を実行していない限り、上記の値は少し歪んでいることに注意してください)。ただし、いつものように、実行時間を測定し、何が最適かを判断するのはあなた次第です。