Кто-нибудь может мне объяснить, почему здесь вызван move constructor?
#include <iostream>
using namespace std;
class ToBeMoved {
public:
ToBeMoved() = default;
ToBeMoved(const ToBeMoved& tbm)
{
cout << "ToBeMoved::copy_ctor" << endl;
}
ToBeMoved(ToBeMoved&& tbm)
{
cout << "ToBeMoved::move_ctor" << endl;
}
ToBeMoved& operator=(const ToBeMoved& tbm)
{
cout << "ToBeMoved::copy_operator=" << endl;
}
ToBeMoved& operator=(ToBeMoved&& tbm)
{
cout << "ToBeMoved::move_operator=" << endl;
}
};
void f_rval(ToBeMoved&& tbm)
{
cout << "f_rval" << endl;
}
void f(ToBeMoved tbm)
{
f_rval(move(tbm));
}
int main(int argc, char *argv[])
{
ToBeMoved tbm;
f(move(tbm));
return 0;
}
Т.е. я вроде понимаю, что происходит, tbm был «перенесен» в параметр f(), но ведь f() задекларирована так, что принимает tbm by value, почему в этом случае не был вызван copy constructor, несмотря на move?