当我尝试使用rvalue reference作为参数的方法重载方法时,我得到一个错误:
错误:调用重载'Test(std :: unique_ptr)'是不明确的 测试t(std :: unique_ptr(new int(1)));
代码:
class Test {
public:
Test(std::unique_ptr<int> val)
: v_(std::move(val)) {
std::cout << "Ctor" << std::endl;
}
Test(std::unique_ptr<int>&& val)
: v_(std::move(val)) {
std::cout << "Move Ctor" << std::endl;
}
private:
std::unique_ptr<int> v_;
};
int main()
{
Test t(std::move(std::unique_ptr<int>(new int(1))));
return 0;
}
像编译器一样,我很困惑。实际上,编译器可以调用接收rvalue引用的fucntion,或者它可以使用rvalue引用调用unique_ptr构造函数并调用第一个方法。为什么不选择前者?