【发布时间】:2014-12-20 10:48:03
【问题描述】:
在下面的代码中,为什么我应该在传递参数时使用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 的代码不会显示任何复制/移动。
【问题讨论】:
-
3834459 上面的两个帖子让您感到困惑吗?还是他们回答了你的问题?
-
Test(const Test&&) 不是“移动 ctor”。测试(Test&&) 是。