深入理解函数模板类型推断(上)

 

namespace  _nasp1
{

template  <typename T>

void   myfunc( T&  abc){.............}

}

 

int   main()

{

int     i  =10 ;//    i类型为int

const int j = i;    //j的类型为cosnt int

const int& k = j;  //k的类型为const int&

 

嗯嗯,我猜的

myfunc(i);                //T 为 int        abc为int&

myfunc(j) ;            //T为  int const    abc为 int const&

myfunc(j);            //T为  int const    abc为 int const&

}

说一下结论:   如果实参是引用类型的,那么引用部分会被忽略,T不会被推导为引用类型

                      当向引用类型传递const引用的实参时,那么形参会被推导为const引用类型。(原来的const引用)

                     实参的const属性会被推导为类型T的const属性,我们就不用担心实参会被修改。

 

 

 

 

namespace  _nasp1
{

template  <typename T>

void   myfunc( const  T&  abc){.............}

}

 

int   main()

{

int     i  =10 ;//    i类型为int

const int j = i;    //j的类型为cosnt int

const int& k = j;  //k的类型为const int&

 

嗯嗯,我猜的

myfunc(i);                //T 为 int        abc为int  const&

myfunc(j) ;            //T为  int          abc为 int const&

myfunc(j);            //T为  int           abc为 int const&

}

若实参是引用类型,引用部分会被忽略掉,T不会被推导为引用类型

T中的const没有了,但是abc里面会有const

 

 

template<typename T>

void myfunc(T*   abc)

{

}

 

int   i =10;

const   int* j =&i;

myfuc(& i);   //T为int      abc为int*

myfunc(j);    //T为int const   abc为int   const

结论:abc中如果没有const ,则实参中的const会被带到形参中去

这个结论对于形参T& abc或者 const  T& abc 也适用

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值