本文主要是介绍模板实参推断和引用以及move和forward详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
模板实参推断和引用以及move和forward详解
从左值引用函数参数推断类型
当一个函数的参数是一个左值引用时,我们只能传递给它一个左值,实参可以是const类型或非const类型,实参是const,则T被推断为const。
例如:
template<typename T> void f1(T&);
f1(i); //实参为int,则T推断为int
f1(ci); //实参为const int,T推断为const int
f1(5); //实参为右值,不能传入右值,错误
如果一个函数参数类型是const T&,正常绑定规则告诉我们可以给它传递任何类型实参–一个对象(const或非const)、一个临时对象或是一个字面常量值。当函数参数本身是const时,T的类型推断的结果不会是一个const类型,因为const已经是函数参数类型的一部分了,它不会再是模板参数类型的一部分。
template<typename T> void f2(const T&);
f2(i); //i是int,则模板参数类型推断为int
f2(ci); //i是const int,模板参数同样被推断为int
f2(5); //一个const &参数可以绑定到右值,则T为int
从右值引用函数参数推断类型
当一个函数参数是一个右值引用时,显然我们可以传递一个右值给它。
这篇关于模板实参推断和引用以及move和forward详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!