C++(移动构造、移动赋值、完美转发)
这三个是 C11 最重要的特性核心目的是减少不必要的内存拷贝提升程序性能。我用最清晰、最实用的方式给你讲透包含定义、代码、区别和用法。前置知识左值 右值左值可以取地址、有名字的变量如 int a10; a 是左值右值临时值不能取地址、用完就销毁如 10、函数返回值C11 用 表示右值引用专门绑定临时对象这是移动语义的基础。右值引用 专门用来偷临时对象资源的。1. 移动构造函数 (Move Constructor)作用把一个临时右值对象的资源直接转移给新对象不拷贝内存速度极快。类名(类名 其他对象) noexcept;移动构造不分配新内存直接接管临时对象的资源必须把原对象的指针置空避免双重释放比拷贝构造快成千上万倍尤其大对象 / 容器2. 移动赋值运算符 (Move Assignment)类名 operator(类名 其他对象) noexcept;3. 完美转发 (Perfect Forwarding)作用在函数模板中完整保留参数的左值 / 右值属性原封不动转发给其他函数不产生额外拷贝。解决痛点模板传参时右值容易被变成左值导致调用拷贝而非移动。三者对比特性移动构造移动赋值完美转发用途创建新对象时转移资源给已有对象转移资源函数模板保持参数类型不变地转发语法A(A)A operator(A)std::forwardT()性能极快无拷贝极快无拷贝零开销无拷贝适用对象临时右值临时右值任意类型左值 右值必须置空源对象是是否