如果对象是右值

时间:2015-08-21 13:15:09

标签: c++ c++11 c++14 rvalue

请考虑以下代码:

class A
{
public:
    A(/* params */) {
        // Fill m_data depending on params
    }

    std::vector<double> get_data() const noexcept {
        return m_data;
    }

private:
    std::vector<double> m_data;
};

std::vector<double> get_data() {
    return A{/* suitable params */}.get_data();
}

我想要的是,m_data 移动到函数get_data()的调用者,即不应该复制。

我怎么能确定,情况确实如此?显然,A{/* suitable params */}是一个右值。因此,它的成员变量m_data在这种情况下是一个右值。那么,是否足以添加另一个成员函数

std::vector<double> get_data() && noexcept {
    return std::move(m_data);
}

0 个答案:

没有答案