传递给函数时使用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 本人,右值和移动语义背后的人来说,这种行为也有点令人惊讶。但是他有一个非常完整的答案出现。