Mam następujący kodC++ gromadzić z ruchu zamiast kopii
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);
Chciałbym tu jest uniknięcie kopiowania ciągów. Niestety nie jest to realizowane przez wdrożenie akumulacji vs2012. Wewnętrznie akumuluj wywołania innej funkcji _Akumuluj, a funkcja rvalue zostaje utracona w procesie.
To ja zamiast wywołać funkcję _Accumulate jak tak
string words = _Accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
mogę uzyskać zamierzony wzrost wydajności.
Czy należy zaktualizować bibliotekę std, aby uwzględnić argumenty rVue?
Czy jest jakiś inny sposób, w jaki mogę używać akumulacji, aby osiągnąć to, czego chcę, bez oszukiwania za dużo?
Twój 'test' nie jest rvalue. 's1' w lambda nie jest rvalue –