在C ++中,何时调用move构造函数?

时间:2018-12-11 06:27:39

标签: c++

我的代码如下:

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构造函数。有人可以告诉我原因吗?

0 个答案:

没有答案