大挪耗

c++完美转发

#include "iostream"

using namespace::std;

void func1(int &ii)//如果参数是左值,调用此函数。
{
    cout<<"参数是左值="<<ii<<endl;
}
void func1(int &&ii)//如果参数是右值,调用
{
    cout<<"参数是右值="<<ii<<endl;
}
template<typename T>
void func2(T& ii)
{
    func1(ii);
}
template<typename T>
void func2(T&& ii)
{
    func1(move(ii));
}
//1)如果模板中(包括类模板和函数模板)函数的参数书写成为T&&参数名,
//那么,函数既可以接受左值引用,又可以接受右值引用。
//2)提供了模板函数std.forward<T>(参数),用于转发参数,
//如果参数是一个右值,转发之后仍是右值引用;如果参数是一个左值,转发之后仍是左值引用。
template<typename TT>
void func(TT &&ii)
{
    func1(forward<TT>(ii));
}


int main()
{
    int ii=3;
    func(ii);//将调用左值函数
    func(8);//将调用右值函数。

}

参数是左值=3
参数是右值=8


已发布

分类

可以收藏大挪耗一下。下载麻烦点城通网盘,站长保证下载速度,不会限速的,放心点就是了;分卷,安卓下载为txt:程序下载为url,不会下载参考不会下载。如果你想让本站活的久一点,请直接捐助

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注