C++笔记 - std::forward

1,730 阅读1分钟

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的构造函数时都是右值引用。

参考: