[C++11]forward完美转发

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11]forward完美转发相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

// 函数原型
template <class T> T&& forward (typename remove_reference<T>::type& t) noexcept;
template <class T> T&& forward (typename remove_reference<T>::type&& t) noexcept;

// 精简之后的样子
std::forward<T>(t);

推导规则:

在这里插入图片描述

#include <iostream>
using namespace std;

template<typename T>
void printValue(T& t)
{
    cout << "l-value: " << t << endl;
}

template<typename T>
void printValue(T&& t)
{
    cout << "r-value: " << t << endl;
}

template<typename T>
void testForward(T && v)
{
    printValue(v);
    printValue(move(v));
    printValue(forward<T>(v));
    cout << endl;
}

int main()
{
    testForward(520);
    int num = 1314;
    testForward(num);
    testForward(forward<int>(num));
    testForward(forward<int&>(num));
    testForward(forward<int&&>(num));

    return 0;
}



/*作者: 苏丙榅
链接: https://subingwen.cn/cpp/move-forward/#2-forward
来源: 爱编程的大丙*/

测试结果:

在这里插入图片描述

该文参考于下面链接
链接: https://subingwen.cn/cpp/move-forward/#2-forward

以上是关于[C++11]forward完美转发的主要内容,如果未能解决你的问题,请参考以下文章

C++11:移动语义Move Semantics和完美转发Perfect Forwarding

C++11:移动语义Move Semantics和完美转发Perfect Forwarding

C++11:移动语义Move Semantics和完美转发Perfect Forwarding

C/C++学习记录:std::forward 源码分析 / 完美转发的作用

C/C++学习记录:std::forward 源码分析 / 完美转发的作用

[C++11] --- 移动语义和完美转发