我的代码如下:
class testfunc {
public:
int operator()(int i) {
return i;
}
testfunc() { cout << "default constructure" << endl; }
testfunc(const testfunc&) {
cout << "copy constructure" << endl;
};
testfunc(testfunc&&) {
cout << "move constructure" << endl;
}
};
template <class Func>
void submit(Func f) {
cout << f(6) << endl;
}
int main()
{
submit(testfunc());
submit(std::move(testfunc()));
getchar();
}
结果是:
default constructor
6
default constructor
move constructor
6
我认为testfunc()
是一个临时值,因此编译器应调用move构造函数。但是事实是submit(testfunc())
不会调用move构造函数,而submit(std::move(testfunc()))
会调用move构造函数。有人可以告诉我原因吗?