background image

用汇编的眼光看 C++

 

(之缺省模板、特化模板)

    缺省函数是 C++的一个基本特色。缺省函数定义比较简单,也就是说,对于函数的某一个输入参数或者几

个输入参数,如果你没有特定的数值的话,那我们就会用缺省的数据进行代替。如果你在调用的过程中使用了

自己的数据,那么缺省数据将被我们自己定义的数据覆盖。下面就是一个缺省函数的示例:

[cpp] 

view plaincopyprint?

1.

int

  add(

int

 m, 

int

 n = 10)  

2.

{  

3.

    return m + n;  

4.

}  

     

 

如果调用呢,有什么区别?

[cpp] 

view plaincopyprint?

1.

262:      

int

 p = add(2);  

2.

00401488   push        0Ah  

3.

0040148A   push        2  

4.

0040148C   call        @ILT+15(add) (00401014)  

5.

00401491   add         esp,8  

6.

00401494   mov         dword ptr [ebp-4],eax  

7.

263:      p = add(3, 4);  

8.

00401497   push        4  

9.

00401499   push        3  

10.

0040149B   call        @ILT+15(add) (00401014)  

11.

004014A0   add         esp,8  

12.

004014A3   mov         dword ptr [ebp-4],eax  

    可以从上面的代码看到,如果单独输入一个数据 2,那么编译器帮我们默认输入了 10;如果输了的数据是

3、4 呢,那么编译器将用 4 代替默认的数据 10。所以说,编译器帮我们做了中间的替换和判断工作。那么回到

 

我们今天讨论的缺省模板类型上面,那会是什么样的情形呢?我们可以编写一个范例:

[cpp] 

view plaincopyprint?

1.

template <typename type1, typename type2 = 

int

>  

2.

class data  

3.

{  

4.

    type2 value;  

5.

public:  

6.

    data(type2 m): value(m) {}  

7.

    ~data() {}  

8.

};