Ho il seguente codice:modo appropriato per trasmettere riferimento rvalue
#include <iostream>
#include <string>
using std::cout;
using std::endl;
void bar(const std::string& str)
{
cout << "const str - " << str << endl;
}
void bar(std::string&& str)
{
cout << "str - " << str << endl;
}
void foo(std::string&& str)
{
bar(str);
}
int main()
{
foo("Hello World");
}
Nel codice di sopra del void bar(const std::string& str)
di sovraccarico viene chiamato. Se desidero chiamare il vuoto bar(std::string&& str)
, devo scrivere bar(std::move(str));
o bar(std::forward<std::string>(str));
Ovviamente il codice di inoltro è più lungo, ma per me ha più senso. La mia domanda è ciò che è più comunemente usato e preferito. Scrivendo bar(std::forward(str));
sarebbe la soluzione migliore imo, ma che non è un'opzione :)
È possibile spostarlo, in avanti dovrebbe essere utilizzato nel codice di modello quando non si è certi che si tratti di valore o riferimento di lvalue. :) In codice codice && significa riferimento universale, che può essere sia rvalore sia lvalue. – Melkon
@Melko Se si fa il tuo commento una risposta, posso accettarlo :) – rozina
Grazie, lo faccio. :) – Melkon