欢迎来到程序员中文网!

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

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

时间:2026年08月12日 04:46:50 浏览:0

拷贝省略(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(); // 无任何输出
}

强制移动减少拷贝


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

参数传递建议



  1. 只读大对象:用 const T&

  2. 需要修改或移动:用 T&T&&

  3. 小型基础类型:直接值传递 int, double


noexcept 对性能的影响


移动构造函数标记 noexcept 能让容器(如 vector)在扩容时使用移动而非拷贝,大幅提升性能。


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

高性能 C++ 代码需要时刻关注拷贝开销。