左值:无名字,临时值,可通过&取地址
右值:有名字,持久值,不可取地址
cpp提供了move方法把左值转化为右值
函数参数
值传递参数:
一般来说会复制一份实参在函数内使用,当参数为定义了移动构造函数的类类型时,对于右值实参会触发移动构造。
引用传递参数:

类模板函数:
C++ 中万能引用是 C++11 引入的特殊语法,仅在以下场景生效:
- 形式为
T&&(无const/volatile修饰,无嵌套在模板参数中); T是模板类型参数,且在函数调用时会发生类型推导。
满足这两个条件,T&&才会成为万能引用(可绑定左值或右值);否则,T&&就是普通的右值引用
进入函数后,参数成为左值,想要保持参数的左/右值性,就需要搭配forward实现完美转发
// 辅助函数:区分左值/右值
void process(int&) { std::cout << "处理左值\n"; }
void process(int&&) { std::cout << "处理右值\n"; }
// 普通函数模板:万能引用 + 完美转发(无类模板,直接写函数模板)
template <typename U>
void forward_param(U&& param) {
process(std::forward<U>(param)); // 完美转发核心
}
843

被折叠的 条评论
为什么被折叠?



