在我看来,这些是该程序应该发生的事情
1. Int i(i)->创建一个新的Int对象,调用副本ctor。
2. print(std :: move(i))->从i中创建一个右值引用,然后将其分配给a,并在此过程中调用move ctor。
3. cout“ print 1”。
4. cout“ main func -1”,因为移动ctor掠夺了它的资源。
所以我对输出的期望是:
ctor
移动ctor
打印1
主要功能-1
但是,从未调用move ctor。 这是实际看到的输出:
ctor
打印2
主要功能2
class Int {
public:
Int(int i) : i_(i) { std::cout << "ctor" << std::endl; }
Int(const Int& other) {
std::cout << "copy ctor " << std::endl;
i_ = other.i_;
}
Int(Int&& other) {
std::cout << "move ctor " << std::endl;
i_ = other.i_;
// Pillage the other's resource by setting its value to -1.
other.i_ = -1;
}
int i_;
};
void print(Int&& a) { std::cout << "print " << a.i_ << std::endl; }
int main() {
Int i(1);
print(std::move(i));
std::cout << "main func " << i.i_ << std::endl;
}
那是为什么?