std::forward
的作用是实现参数转发功能. 我们知道参数可能是引用或右值引用, 在函数内部再次传递该参数数时, 我们希望参数还是保持原来的状态. 那就需要用使用std::forward
进行参数转发. 下面看一个例子更加直观:
#include <iostream>
struct A {
A(int &&n) { std::cout << "rvalue = " << n << std::endl; }
A(int &n) { std::cout << "lvalue = " << n << std::endl; }
};
template <typename T, typename U> void forward(U &&u) {
T(std::forward<U>(u));
}
template <typename T, typename P, typename... U> void forward(P && p, U &&... u) {
T(std::forward<P>(p));
forward<T>(std::forward<U>(u)...);
}
int main() {
int i = 1;
forward<A>(i, 2, 3);
}
输出:
lvalue = 1
rvalue = 2
rvalue = 3
从上面的输出可以看出, 变量 i
传入 forward
函数前是左值, 再次传入 A
的构造函数时是左值引用. 而右值 2和3
直到传入 A
的构造函数时都是右值引用. 如果觉得有帮助,可以扫描右边的微信打赏码支持一下.