You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优先调用vector的移动构造函数而非拷贝构造函数?

C++ vector移动构造与赋值相关问题解答

你的写法是否正确?

两段代码的写法都是正确的:

vector<double> my_vec(std::move(my_other_vec)); // 移动构造
my_vec = std::move(my_other_vec); // 移动赋值

移动构造会直接窃取my_other_vec的内部资源来创建新的my_vec,移动赋值则让已存在的my_vec接管my_other_vec的资源,两者都能避开深拷贝的开销,实现高效的资源转移。

调用移动构造是否必须使用std::move?

是的,必须用std::move。移动构造函数的参数是右值引用类型(vector&& other),而像my_other_vec这样的命名变量属于左值,编译器默认会匹配参数为const vector&的拷贝构造函数。std::move的作用就是把左值强制转换成右值引用,引导编译器匹配移动构造函数,触发资源窃取逻辑。

移动完成后,能否将my_other_vec当作空vector继续使用?

可以。根据C++标准,被移动后的容器处于合法但未指定状态,但std::vector明确保证被移动后的实例是空的——size()返回0,empty()返回true。你可以安全地对它执行所有不依赖原有状态的操作,比如push_back()添加新元素、clear()、重新赋值等,不会产生未定义行为。

内容的提问来源于stack exchange,提问作者user20896951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:30:46