zoukankan      html  css  js  c++  java
  • 深入理解函数模版

    函数模版深入理解

      编译器从函数模版通过具体类型产生不同的函数

      编译器会对函数模版进行两次编译

        对模版代码本身进行编译

        对参数替换后的代码进行编译

    注意事项:

      函数模版本身不允许隐式类型转换

        自动推导类型时,必须严格匹配

        显示类型指定时,能够进行隐式类型转换

    函数模版可以定义任意多个不同的类型参数

    template

    <typename T1, typename T2, typename T3>

    T1 Add(T2 a, T3 b)

    {

      return static_cast<T1>(a+b);

    }

    对于多参数函数模版

      无法自动推导返回值类型

      可以从左向右部分指定类型参数

    //T1 = int, T2 = double, T3 = double

    int r1 = Add<int>(0.5,0.8);

    //T1 = int, T2 = float, T3 = double

    int r2 = Add<int,float>(0.5,0.8);

    //T1 = int, T2 = float, T3 = float

    int r3 = Add<int, float, float>(0.5,0.8);

    工程中将返回值参数作为第一个类型参数

    函数模版可以像普通函数一样被重载

      c++编译器优先考虑普通函数

      如果函数模版可以产生一个更好的匹配,那么选择模板

      可以通过空模板实参列表限定编译器只匹配模板

    double r2 = Max<>(0.5,0.8);  //限定编译器只匹配函数模板

    小结

    函数模板通过具体类型产生不同的函数

    函数模板可以定义任意多个不同的类型参数

    函数模板中的返回值类型必须显示指定

    函数模板可以像普通函数一样被重载

  • 相关阅读:
    MP4文件格式
    ASP.net 学习路线(详细)
    H.264开源解码器评测
    H264编码 封装成MP4格式 视频流 RTP封包
    MP4介绍与基本AVC编码(x264)教程
    创建一个简单的WCF程序
    VUE 从零开始 学习笔记 一
    关于阿里云短信接口的使用
    对Ul下的li标签执行点击事件——如何获取你所点击的标签
    二逼程序员与苦逼程序员
  • 原文地址:https://www.cnblogs.com/sugarWill666/p/9211579.html
Copyright © 2011-2022 走看看