函数模板
2015-10-05 10:02
316 查看
/*
1 函数模板可以像普通函数一样被重载
2 C++编译器优先考虑匹配普通函数
3 如果函数模板可以产生一个更好更精确的匹配,那么选择模板
4 可以通过空模板实参列表的语法限定编译器只匹配模板函数
*/
/*
函数模板不允许自动类型转化,隐式的类型转换编译器会报错
普通函数能够进行自动类型转换
*/
函数模板的深入理解
编译器会对函数模板进行两次编译
―在声明的地方对模板代码本身进行编译
―在调用的地方对参数替换后的代码进行编译
1 函数模板可以像普通函数一样被重载
2 C++编译器优先考虑匹配普通函数
3 如果函数模板可以产生一个更好更精确的匹配,那么选择模板
4 可以通过空模板实参列表的语法限定编译器只匹配模板函数
*/
/*
函数模板不允许自动类型转化,隐式的类型转换编译器会报错
普通函数能够进行自动类型转换
*/
#include <iostream> using std::cout; using std::cin; using std::endl; int Max(int a, int b) { cout << "int Max(int a, int b)" << endl; return a > b ? a : b; } template<typename T> T Max(T a, T b) { cout << "T Max(T a, T b)" << endl; return a > b ? a : b; } template<typename T> T Max(T a, T b, T c) { cout << "T Max(T a, T b, T c)" << endl; return Max(Max(a, b), c); } void main() { cout << Max(1, 3) << endl;//优先匹配普通函数 cout << Max<>(2, 4) << endl;//显式告知编译器,只匹配模板函数 cout << Max(3.0, 4.0) << endl; cout << Max(5.0, 6.0, 7.0) << endl; cout << Max('a', 80) << endl; cin.get(); return; }
函数模板的深入理解
1.编译器并不是提前把函数模板处理成能够处理任意类型的函数,这样效率很低 2.编译器编译期间,通过函数模板参数,生成不同类型的函数
编译器会对函数模板进行两次编译
―在声明的地方对模板代码本身进行编译
―在调用的地方对参数替换后的代码进行编译
相关文章推荐
- Just4Fun - Comparaison between const and readonly in C#
- 使用JBoss Tool反向创建PO类
- Lombox 配置使用
- 学习ThinkPHP3.2.2:video12,更改模板路径替换规则
- linux 下文件的压缩与解压(3)
- 学习ThinkPHP3.2.2:video12,后台目录的组织
- unity官方demo学习之Stealth(十二)角色生命值
- Java基础知识强化之集合框架笔记25:Vector的特有功能
- BZOJ 2705: [SDOI2012]Longge的问题(euler函数)
- Android Studio的top level element is not completed问题
- http_banner获取v0.2
- 数据库以及线程发生死锁的原理及必要条件,如何避免死锁
- 四则运算
- 删除数据库关键数据文件后实例是否会崩溃
- Bootstrap CSS——表单(一)
- 在C#中动态地添加控件
- LaTeX分情况公式的书写
- 浅尝硬盘分区表
- Laravel 启动流程
- HTML5学习之二:HTML5中的表单2