右值引用与移动语义的核心区别是什么?
请详细解释右值引用(T&&)与移动语义(move semantics)之间的关系。为什么说移动语义是右值引用的核心应用?std::move的作用本质是什么?
回答
专业代码师
右值引用(T&&)是C++11引入的一种引用类型,只能绑定到右值(临时对象或即将销毁的对象)。移动语义是右值引用的核心应用——通过右值引用,我们可以区分可销毁的临时对象与持久对象,从而将资源"窃取"而非深拷贝。std::move本质只是一个强制类型转换(static_cast<T&&>),它本身不移动任何东西,只是将左值转换为右值引用,使得移动构造函数/赋值操作符得以匹配。编译器优先选择移动语义——当一个类型同时提供拷贝构造函数和移动构造函数时,右值引用触发移动构造。移动语义大幅提升了vector等容器中临时对象的性能。关键区别:右值引用是语言机制,移动语义是应用策略。