欢迎来到程序员中文网!

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

C++ 移动语义与右值引用实战

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

C++ 移动语义与右值引用实战


移动语义避免不必要的拷贝,提升性能,是 C++11 最重要的特性之一。


1. 左值与右值



  • 左值:有地址的变量(如 int a = 5; 中的 a)。

  • 右值:临时对象或字面量(如 5func() 返回值)。


2. 移动构造函数与移动赋值


class MyString {
char* data;
public:
// 移动构造函数
MyString(MyString&& other) noexcept : data(other.data) {
other.data = nullptr;
}
// 移动赋值
MyString& operator=(MyString&& other) noexcept {
if (this != &other) {
delete[] data;
data = other.data;
other.data = nullptr;
}
return *this;
}
};

3. std::move 与 std::forward



  • std::move 将左值转为右值引用,用于移动语义。

  • std::forward 完美转发,保持参数原始类型。


std::vector<int> v1 = {1,2,3};
std::vector<int> v2 = std::move(v1); // 移动,v1 变为空

4. 编译器优化的返回值优化(RVO/NRVO)


现代编译器会省略拷贝,即使没有移动语义也能优化。