1.类型推导

解释类型推导如何工作,auto是如何依赖模板类型推导的,以及decltype独特工作规则。

 

1.理解模板(template)类型推导

        

  针对以上代码的三种情况讨论

   1. paramType是一个指针或引用,但不是通用引用。

    2. paramType是一个通用引用。

    3. paramType既不是指针也不是引用。

1.paramType是一个指针或引用,但不是通用引用

          如果expr的类型是一个引用忽略其引用部分来推导T再推导paramType。

2. paramType是一个通用引用

         如果expr是左值T和ParamType都会被推导为左值引用,唯一T和ParamType都推导成引用的方式。

        如果expr是右值,沿用情景一的推导规则。      

 3. paramType既不为引用也不为指针的情况

        成为一个完整的新对象(值传递),忽略引用部分

        const和volatile将会被忽略。  

4. 数组实参

        传导时退化为指针传导,除非被用于初始化引用。

5. 函数实参

        传导时退化指针传导,除非被用于初始化引用。

 总结:

        有引用的实参引用会被忽略

        对于通用引用(&&), 左值引用会被特殊对待(推导成引用)

        const和volatile将常被忽略

        数组或函数实参会退化为指针传递,除非被用于初始化引用(则被推导为引用)

2.理解自动(auto)类型推导

针对以下的三种情况讨论

   1. 类型说明符是一个指针或引用但不是通用引用

    2. 类型说明符是一个通用引用

    3. 类型说明符既不是指针不是引用

 总结:

       auto类型推导和模板类型推导相同,只是{}初始化代表std::initializer_list,模板类型不支持。

       auto 允许出现在函数返回值或者lambda函数形参中,沿用模板类型推导机制

3.了解decltype

 总结:

        decltype总是不加修改的产生变量或表达式的类型。

        对于T类型的左值表达式, decltype总是产出T的引用类型T&

         C++14支持decltype(auto),使用decltype规则推导

4.学会查看类型推导结果

总结:

        typeid() 不总是可靠

        可以使用 <boost/type_index,hpp>中type_id_with_cvr

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值