zoukankan      html  css  js  c++  java
  • C++ Primer chap10

    用宏扩展机制实现的函数,虽然没有类型的限制,但是有一定的危险,比如调用时传入p++等,可能出错。

    如:

    #define min(a,b) ((a) < (b) ? (a) : (b)) 

    调用 min (data1++, data2) 就有副作用。

    2

     如同非模板函数一样 函数模板也可以被声明为inline 或extern    应该把指示符放在模 

    板参数表后面 而不是在关键字template 前面  

    // ok: 关键字跟在模板参数表之后 

    template <typename Type> 

         inline 

         Type min( Type, Type ); 

    // 错误: inline 指示符放置的位置错误 

    inline 

    template <typename Type> 

         Type min( Array<Type>, int ); 

    3

     函数模板指定了怎样根据一组或更多实际类型或值构造出独立的函数 这个构造过程被 

    称为模板实例化 template instantiation      这个过程是隐式发生的 它可以被看作是函数模 

    板调用或取函数模板的地址的副作用 例如 在下面的程序中 min()被实例化两次 一次是 

    针对5 个int 的数组类型 另一次是针对6 个double 的数组类型  

    // 函数模板 min() 的定义 

    // 有一个类型参数 Type 和一个非类型参数 size 412                                                                                                                                                          第十章  函数模板 

    template <typename Type, int size> 

         Type min( Type (&r_array)[size] ) 

         Type min_val = r_array[0]; 

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

             if ( r_array[i] < min_val ) 

                 min_val = r_array[i]; 

         return min_val; 

    // size 没有指定——ok 

    // size = 初始化表中的值的个数 

    int ia[] = { 10, 7, 14, 3, 25 }; 

    double da[6] = { 10.2, 7.1, 14.5, 3.2, 25.0, 16.8 }; 

    #include <iostream> 

    int main() 

         // 为 5个 int的数组实例化 min() 

         // Type => int, size => 5 

         int i = min( ia ); 

         if ( i != 3 ) 

             cout << "??oops: integer min() failed\n"; 

         else cout << "!!ok: integer min() worked\n"; 

         // 为 6 个 double 的数组实例化 min() 

         // Type => double, size => 6 

         double d = min( da ); 

         if ( d != 3.2 ) 

             cout << "??oops: double min() failed\n"; 

         else cout << "!!ok: double min() worked\n"; 

         return 0; 

           调用 

    int i = min( ia ); 

            被实例化为下面的min()的整型实例 这里Type 被int    size 被5 取代  

    int min( int (&r_array)[5] ) 

         int min_val = r_array[0]; 

         for ( int ix = 1; ix < 5; ++ix ) 

             if ( r_array[ix] < min_val ) 

                 min_val = r_array[ix]; 

         return min_val; 

            类似地 调用 

    double d = min( da ); 

            也实例化了min()的实例 这里Type 被double    size 被6 取代  

  • 相关阅读:
    勿忘初心
    欧拉函数与数论的结合UVA11426
    法雷级数
    欧拉函数及其应用
    poyla计数问题
    组合计数问题中容斥原理的应用
    数学问题当中的一些基本计数问题
    HDU4642博弈好题
    KMP算法在字符串中的应用
    UVA11722概率问题之线性规划
  • 原文地址:https://www.cnblogs.com/liujiahi/p/2196381.html
Copyright © 2011-2022 走看看