【c++ templates读书笔记】【1】函数模板
来源:互联网 发布:怎样下载cad软件 编辑:程序博客网 时间:2024/06/08 08:57
1、定义函数模板:
template<typename T>inline T const& Max(T const& a, T const& b){ return a < b ? b : a;}
解释:template表明了这是一个函数模板,<>指定了模板参数区域,typename表明了后面的参数是一个类型名, T是模板参数,它可以用来指定所有的类型,a和b是调用参数,位于模板函数名称后面,在一对()内进行声明。这里typename可以用class来取代,但最好使用typename。
2、调用函数模板
#include<iostream>#include<string>using namespace std;template<typename T>inline T const& Max(T const& a, T const& b){return a < b ? b : a;}int main(){cout << Max(5, 8) << endl; cout << Max(3.4, -6.5) << endl;string str1 = "math";string str2 = "mathmatics";cout << Max(str1, str2) << endl;system("pause");return 0;}
调用函数模板时,模板被编译两次:
第一次:实例化之前,检查模版代码本身,查看语法是否正确。
第二次:在实例化期间,检查模版代码,查看是否所有的调用都有效。
3、重载函数模板
函数模版也可以进行重载,一个非模版函数可以和一个同名的函数模版同时存在,调用的优先级是非模板函数的优先级高。<>符号显式指定一个空的模板实参列表,告诉编译器只有模板才能匹配这个调用,而且所有的模板参数都应该根据调用实参演绎出来。函数的所有重载版本的声明都应该位于该函数被调用的位置之前。
例子说明:
#include<iostream>#include<string>using namespace std;inline int const& Max(int const& a, int const& b){cout << "调用(1):";return a < b ? b : a;}//(1)template<typename T>inline T const& Max(T const& a, T const& b){cout << "调用(2):";return a < b ? b : a;}//(2)template<typename T>inline T const& Max(T const& a, T const& b,T const& c){cout << "调用(3):";return Max(Max(a, b), c);}//(3)int main(){cout << Max(7, 45, 44) << endl;//调用(3)cout << Max(7.2, 5.7) << endl;//调用(2),Max<double>cout << Max<>(4, 5) << endl;//调用(2),<>符号显式指定一个空的模板实参列表,告诉编译器只有模板才能匹配这个调用cout << Max(4, 5) << endl;//调用(1)system("pause");return 0;}
0 0
- C++ Templates读书笔记1__函数模板
- 【c++ templates读书笔记】【1】函数模板
- 《C++Templates》第二章-初探函数模板
- C++ Templates:函数模板
- c++ templates 函数模板
- 《C++Primer》读书笔记--函数模板
- 模板 Templates 模板函数 模板类
- C++ 函数模板( Function templates)
- 【c++ templates读书笔记】【2】类模板
- 【c++ templates读书笔记】【5】模板实战
- 【c++ templates读书笔记】【7】模板元编程
- Function Templates 函数模板——初窥
- C++ Templates学习笔记之:函数模板
- C++ Templates笔记 2 重载函数模板
- 模板(Templates)
- Templates 模板:
- Templates 模板:
- 【c++ templates读书笔记】【3】非类型模板参数
- Scala深入浅出实战经典:38,List伴生对象操作方法代码实战
- Node.js中的DNS模块
- OpenCV 利用命令行(cmd)训练模型
- Windows下使用VS编译Lua
- Scala深入浅出实战经典:39,ListBuffer、ArrayBuffer、Queue、Stack操作代码实战
- 【c++ templates读书笔记】【1】函数模板
- Hibernate 应用
- Android SDK Manager
- Scala深入浅出实战经典:40,Set、Map、TreeSet、TreeMap操作代码实战
- arraylist add(int index) 方法时 index是处于前半部分还是后半部分效率高
- NYOJ -2括号配对问题
- Node.js中的Net模块
- https https和http区别,https证书分为哪几类?
- Android教程-01 Android Studio创建第一个项目