如果我们要写一个接收不同值类型的函数,编译器在底层是通过不同的引用符号来重载和区分它们的:
函数 处理数据(左值引用 T& 变量) {
// 编译器说:传进来的是个正经左值(有名字、有地址)。
// 我必须小心翼翼地复制它,绝对不能破坏原数据!
执行深拷贝(变量);
}
函数 处理数据(右值引用 T&& 变量) {
// 编译器说:传进来的是个右值(纯右值或将亡值,反正它马上要死了)。
// 太好了!我可以合法当劫匪,直接偷走它的堆内存指针!
执行零拷贝所有权转移(变量);
}