首页 > 引用限定符与std::move()的问题

引用限定符与std::move()的问题

class Quote{
public:
    Quote(const Quote& q) : bookNo(q.bookNo), price(q.price) {}
    Quote(Quote&& q) noexcept : bookNo(std::move(q.bookNo)), price(std::move(q.price)) {}
    
    virtual Quote* clone() const & { return new Quote(*this); }
    virtual Quote* clone() && {return new Quote(std::move(*this));}
    //这里用std::move的用意是什么?是为了显式调用Quote(Quote&& q)这个构造函数吗?我原以为直接virtual Quote* clone() && {return new Quote(*this);}就行了,因为有&&引用限定符,说明*this是右值。我说错没?

private:
    std::string bookNo;

protected:
    double  price = 10.0;
};

尽管virtual Quote* clone() &&的参数本来是右值,但因为*this这个操作使之变成了左值,所以还需要move()操作将之变为右值


没错. 我特意还去看了一下标准文档, 发现果然有这种写法.

Quote* q = Quote().clone();

这行代码就会调用你那个clone() &&的重载函数, 因为*this是一个右值对象.

【热门文章】
【热门文章】