欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

C++ 性能优化:移动语义与拷贝省略

时间:2026年08月12日 05:34:29 浏览:0

C++ 性能优化:移动语义与拷贝省略


移动语义和编译器的拷贝省略(RVO)能显著减少开销。


1. 拷贝省略(RVO/NRVO)


编译器会省略返回值的拷贝,直接构造到目标位置。


struct BigData {
BigData() = default;
BigData(const BigData&) { std::cout << 'Copy' << std::endl; }
BigData(BigData&&) { std::cout << 'Move' << std::endl; }
};

BigData create() {
BigData local;
return local; // 触发 RVO,无拷贝
}

int main() {
BigData obj = create(); // 无输出
}

2. 强制移动


std::vector<BigData> vec;
BigData data;
vec.push_back(std::move(data)); // 调用移动构造

3. 参数传递建议



  • 只读大对象:const T&

  • 需要修改或移动:T&T&&

  • 小型类型:值传递


4. noexcept 对移动的影响


移动构造函数标记 noexcept 能让 vector 扩容时使用移动而非拷贝。


class MyClass {
public:
MyClass(MyClass&& other) noexcept { /* ... */ }
};

关注拷贝开销是写出高效 C++ 代码的关键。