В приведенном ниже коде, почему я должен использовать std::forward
при передаче аргументов?Почему я должен использовать std :: forward?
class Test {
public:
Test() {
std::cout << "ctor" << std::endl;
}
Test(const Test&) {
std::cout << "copy ctor" << std::endl;
}
Test(const Test&&) {
std::cout << "move ctor" << std::endl;
}
};
template<typename Arg>
void pass(Arg&& arg) {
// use arg..
return;
}
template<typename Arg, typename ...Args>
void pass(Arg&& arg, Args&&... args)
{
// use arg...
return pass(args...); // why should I use std::forward<Arg>(args)... ?
}
int main(int argc, char** argv)
{
pass(std::move<Test>(Test()));
return 0;
}
код с или без std::forward
не показывает копировать/перемещать вокруг.
род занятий; http://stackoverflow.com/questions/3582001/advantages-of-using-forward – Niall
http://stackoverflow.com/questions/7257144/when-to-use-stdforward-to-forward-arguments – Drax
3834459 как насчет над двумя сообщениями вы сбиваетесь с толку? Или они отвечают на вашу проблему? – Yakk