C++ std::forward

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 的构造函数时都是右值引用. 如果觉得有帮助,可以扫描右边的微信打赏码支持一下.

参考:

Leave a Reply

Your email address will not be published. Required fields are marked *