zoukankan      html  css  js  c++  java
  • VC++ (五)特殊函数形式

    1、函数模板(template)

    当需要定义多个具有相同函数名的函数时,需要进行函数重载(overload)。函数重载的条件是这些函数的形参列表各不相同。事实上,所有函数都有签名,函数的签名由函数名称和形参列表确定,程序中每个函数都必须有唯一的签名。同理,不同的返回值类型不足以区别函数。

    当多个函数重载时,仅仅因为变量和形参类型不同,而算法和流程一致,为避免对每个函数重复编写本质上相同的代码,可以采用函数模板。如下:

      template<typename T>

      T Max(T x[], int len){

        T result = x[0];

        for(int i = 1; i<len; i++)

          if(result < x[i]) result = x[i];

        return result;

      }

    调用时如下:

      int iValus[] = {1,2,3,4};

      double dValues[] = {0.1,0.2,0.3,0.4};

      int iMax = Max(iValues, 4);

      double dMax = Max(dValues, 4);

    编译器会自动识别并生成相应代码。

    2、泛型函数(generic)

    泛型函数的作用与函数模板相似,但工作原理上有很大不同:使用函数模板时,编译器根据模板生成需要的函数的源代码,然后与其他代码一起编译,在某些情况下,将导致许多函数的产生,从而使执行模块的体积增大。而泛型函数本身将被编译器编译,当调用某个与泛型函数说明匹配的函数时,实际类型将在运行时替代类型形参,这样一来没有额外代码在编译时生成。泛型函数的定义与函数模板类似,如下:

      generic<typename T> where T:IComparable

      T Max(array<T>^ x){

        T result = x[0];

        for(int i= 1;i< x->Length; i++)

          if(result->CompareTo(x[i]) < 0) result= x[i];

        return result;

      }

    关键字where后面内容,是对在使用泛型函数时,用于替代T的实际类型的约束条件,在此处表示该类型必需实现IComparable接口。

    3、内联函数(inline)

    当函数定义为内联函数时,编辑器将设法以函数体代码替代函数调用,所以内联函数最适合用于非常短小的、频繁调用的简单函数,如循环体内的简单函数调用等。通过内联函数可以避免调用函数时的系统开销,从而加速代码运行。如:

      inline double Multiplication(double dA, double dB) { return dA * dB};

      double dM = 0;

      int i;

      for (i=0;i<10000;i++){

        dM += Multiplication(PI, i / 0.123 );  //循环内的简单运算

      } 

  • 相关阅读:
    criteria用法
    Python Web开发学习-Django(13)多对多关系
    Python Web开发学习-Django(12)多对一关系
    Python Web开发学习-Django(10)查询集操作
    Python Web开发学习-Django(9)数据的增删改查
    Python Web开发学习-Django(11)导入数据到数据库
    Python Web开发学习-Django(8)数据的添加、获取和筛选
    Python Web开发学习-Django(7)数据库连接
    Python Web开发学习-Django(6)数据库迁移
    Python Web开发学习-Django(5)获取URL的中的数据
  • 原文地址:https://www.cnblogs.com/ChinaEHR/p/2225026.html
Copyright © 2011-2022 走看看