Ho il seguente codiceC++ si accumulano con mossa invece di copia
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);
Quello che vorrei è quello di evitare di copiare stringa. Sfortunatamente questo non è realizzato dall'implementazione di accumulo vs2012. Accumulo internamente chiama un'altra funzione _Accumula e la funzionalità rvalue si perde nel processo.
E io invece chiamare la funzione _Accumulate in questo modo
string words = _Accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
ottengo il guadagno di prestazioni previsto.
La libreria std deve essere riscritta per tenere in considerazione gli argomenti rvalue?
C'è qualche altro modo in cui posso usare accumulare per realizzare ciò che voglio senza imbrogliare troppo?
vostro 'test' non è un rvalue. il 's1' in lambda non è un rvalore –