C++之模板

模板能够直接支持通用型程序设计,即直接采用类型作为参数的程序设计。templates是节省时间和避免代码重复的极好方法,我们可以只输入一个类模板,就能让编译器实例化所需要的很多个特定类及函数。

1、声明的作用域。C的作用域延伸到由template<class C>作为前缀的声明的结束处。

这就是我们写一个类模板时,在类的声明之前写入template<class C>。在类外定义类的成员函数时又需要在函数实现之前写入template<class C>的原因。

2、typename和class的区别。

简单点,typename用来说明一个qualified name是一个类型,在模板定义时的class和typename是没有区别的。

3、隐式类型推测转换。

编译器能够从一个调用中推测出类型参数和非类型参数,只要这个调用的函数参数表能够唯一地标识出模板参数的一个集合。但编译器不会对类模板的参数做任何推测。

4、函数模板重载。

多个函数模板可以具有相同的名字,也可以声明具有统一名字的多个函数模板与常规函数的组合。编译器根据一系列判定规则,选取一个适合的,或者更优的模板函数进行实例化。当产生歧义,找不到匹配时,是一个错误。

5、默认模板参数

C++支持默认参数,模板当然也可以。但默认的模板参数只有在不提供参数时,才进行语义检查。也就是说只有在使用时,才进行语义检查。

6、template<>

template<>前缀说明这是一个专门化,可以不用模板参数描述。C++默认方式一般对模板函数建立代码段的副本,很容易导致严重的代码膨胀。使用此技术可以有效减少代码长度。

7、模板和派生类

如果运行时的效率非常重要,那么最好使用模板而不是派生类。如果增加新功能而又不重新编译很重要,最好使用派生类而不是模板。如果无法定义公共基类,最好用模板而不是派生类。当有兼容性约束的内部类和结构非常重要时,最好使用模板而不是派生类。

最近被问到模板的缺点,也讨论下这个问题吧。

1、模板可能引起代码膨胀。带有类型参数的模板在实例化时,可能生成多个代码块,引起代码膨胀。

2、调试困难。模板提供了编译期多态,编译之前进行了参数实例化。还没有存在一个IDE能够对模板进行断点调试。

3、模板不能像链接库那样被广泛使用。模板的数据类型只能在编译时才能被确定。因此,所有用基于模板算法的实现必须包含在整个代码的头文件中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值