Mam następujący kod:odpowiedni sposób do przekazania rvalue Reference
#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");
}
w powyższym kodzie przeciążenie void bar(const std::string& str)
jest wywoływana. Jeśli chcę przeciążenie void bar(std::string&& str)
nazywać I albo trzeba napisać bar(std::move(str));
lub bar(std::forward<std::string>(str));
Oczywiście kod przodu jest dłuższy, ale to sprawia, że więcej sensu dla mnie. Moje pytanie dotyczy tego, co jest częściej używane i preferowane. Pisanie bar(std::forward(str));
byłoby najlepszym rozwiązaniem imo, ale to nie jest opcja :)
Możesz go przenieść, do przodu należy użyć w szablonie kodu, gdy nie możesz być pewien, czy jest to wartość r lub wartość l. :) W templated code && oznacza odniesienie uniwersalne, które może być albo wartością r, albo lwartością. – Melkon
@Melko Jeśli skomentujesz odpowiedź, mogę ją zaakceptować :) – rozina
Dzięki, robię to. :) – Melkon