Effective Modern C++ 之 模板型别推导

模板的型别推到是C++最广泛的特性之一。现在让我们先简单看一个函数模板推导。 

template<typename T>
void fun(PRAMTYPE pram);


fun(_parm);

这时我们会问T的类型是什么呢?PRAMTYPE的类型又是什么呢?_pram和T的类型,PRAMTYPE的类型存在什么关联呢?这时候就要分三种情况去讨论。

  • PRAMTYPE具有指针或引用类型,但不是个万能引用。             

当我们向引用后者指针型别传递常量对象时,说明我们要求该对象是具有只读属性,因此T的型别便具有const属性,pram的型别便是const的引用或者指针。因为对象的引用实质是另个对象的别名,所以对象的引用在推倒过程中会被忽略。当PRAMTYPE是引用型别时,数组或者函数不会向指针进行退化。

  • RRAMTYPE是个万能引用(不是右值引用哦)

如果_pram是个左值,T和PRAMTYPE都会被推导成左值引用,如果为右值,T和PRAMTYPE按照第一种情况处理。

  • PRAMTYP的类型是按值传递

按值传递的最大特性即是:传递的是对象的副本,而并非对象本身。因此,对象的常量性便会被忽略。当按值传递时,数组或者函数会退化成指针来使用

发布了50 篇原创文章 · 获赞 11 · 访问量 4078

猜你喜欢

转载自blog.csdn.net/qq_43145594/article/details/103980909