传递给函数时使用std::vector误解移动语义

我试图理解移动语义的概念并做了一些测试。我有以下功能:

// testing the move semantic when passing 
// argument to be modified without copying

void process_copy( std::vector<int>&& aVec)
{
    std::cout << "Move semanticn";
    aVec.push_back(42);
}

现在在主要功能中,以下内容:

int main()
{
    std::vector<int> w_vec = {1,2,3,4,5};
    process_copy( std::move(w_vec));
}

我希望w_vec现在是空的,因为我通过移动转换(将左值转换为右值)传递了它。但结果现在w_vec包含6 个元素(42 个已添加到向量中)。

我想念的东西?是std::vector可移动的物体吗?

回答

我的CoreCpp 2019 T 恤的图片可能与此处相关。

这是正面。

有趣的std::move是,即使对于 Howard Hinnant 本人,右值和移动语义背后的人来说,这种行为也有点令人惊讶。但是他有一个非常完整的答案出现。


以上是传递给函数时使用std::vector误解移动语义的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>