아래 코드에서 인수를 전달할 때 왜 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