完美转发 forward

转载:聊聊C++中的完美转发 - 知乎 (zhihu.com)

 左右值概念:decltype类型推导 和左右值概念_qq_1410888563的博客-CSDN博客

重点:
int a=1;//其中a是左值,1是右值。

通常一个

函数 void Test(int a)   //参数可以传左值和右值.相当于 a=传入那个参数;

Test(a);

Test(1);

函数 void Test(int &a) //参数需要传入左值

Test(1);是错误的。

函数 void Test(int &&a) //参数需要传入右值       

Test(1);是对的

超级重点:&&传入右值,通常看到函数Test && (int a),或者参数 Test (int && a),说明传入和传出的是右值。

forward:可以保证传入的是什么值就是什么值

move:只能传入右值

#include 

template
void print(T& t) {
    std::cout << "左值" << std::endl;
}

template
void print(T&& t) {
    std::cout << "右值" << std::endl;
}

template
void testForward(T&& v) {
    print(v);
    print(std::forward(v));
    print(std::move(v));
}

int main(int argc, char* argv[])
{
    testForward(1);

    std::cout << "======================" << std::endl;

    int x = 1;
    testForward(x);
}

完美转发 forward_第1张图片

 

你可能感兴趣的:(C++经验,c++)