要深入理解 和 的本质区别和底层原理,首先需要记住一句C++界的名言(出自 Scott Meyers): > 不移动任何东西, 不转发任何东西。在运行期,它们不会产生哪怕一行可执行的机器码。 它们本质上都是编译期的无条件或条件强制类型转换()。 下面我们从底层原理、源码实现和本质区别三个维度来深度剖析。 --- 一、 :无条件的右值转换 1. 核心作用 的唯一作用就是把输入的参数无条件地强制转换为一个右值引用(rvalue reference),从而让编译器在后续操作中优先选择移动构造/移动赋值函数,而不是拷贝函数。 2. 底层原理与源码 在 C++ 标准库中, 的典型实现如下(以 C++14 为例): 原理拆解: 1. 参数推导 ():这里的 是万能引用(Universal Reference / Forwarding Reference)。无论传入的是左值还是右值,它都能接收。 2. 脱去引用 ():如果直接强转为 ,由于C++的引用折叠规则(下文会讲),如果传入的是左值, 会被推导为 , 折叠后依然是 (左值),达不到强转右值的目的。因此,必须先用 把类型 上的 或 扒光,...