У меня есть следующий код
auto adder = [](string& s1, const string& s2)->string&&
{
if (!s1.empty())
s1 += " ";
s1 += s2;
return move(s1);
};
string test;
test.reserve(wordArray.size() * 10);
string words = accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
Что я хотел бы здесь, так это избежать строкового копирования. К сожалению, это не достигается в результате реализации vs2012. Внутри накапливается вызов другой функции _Accumulate и функция rvalue теряется в процессе.
Вместо этого я вместо этого называю функцию _Cccumulate
string words = _Accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
Я получаю предполагаемое увеличение производительности.
Должна ли переписываться библиотека std для принятия аргументов rvalue?
Есть ли другой способ, который я могу использовать для накопления, чтобы выполнить то, что я хочу, не слишком обманывая?