use*_*183 11 c++ language-lawyer
换句话说是以下代码声音(定义的行为,便携式,...)
std::vector<int> vec(100,42);
std::vector<int> other = std::move(vec);
vec.resize(0);//is this sound
//using vec like an empty vector
Run Code Online (Sandbox Code Playgroud)
是的,这是安全的.
从§23.3.6.5开始:
如果
sz <= size(),相当于通话pop_back()size() - sz时间.如果size() < sz,将sz - size()默认插入的元素附加到序列中.
所以基本上,当你调用时resize(0),它会调用,pop_back()直到从向量中删除每个元素.
你移动并不重要vec,因为即使状态vec未指定,它仍然是你可以修改的有效矢量.
所以,在std::vector打电话之后,它将是空的resize(0).
从对象移动后,通常不能对对象的状态做出任何假设.这意味着您只能调用没有任何前提条件的成员函数.令人高兴的是,std::vector::resize没有依赖于值的前提条件,因此您可以调用resize移动的向量.
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |