C++ 函数模板二(函数模板重载)
2016-07-09 21:48
225 查看
//函数模板重载 #include<iostream> using namespace std; /* 函数模板会进行严格的类型匹配,模板类型不提供隐式类型转化 普通函数能够进行自动类型转换 */ /* 函数模板重载四大规则 1 函数模板可以像普通函数一样被重载 2 C++编译器优先考虑普通函数 3 如果函数模板可以产生一个更好的匹配,那么选择模板 4 可以通过空模板实参列表的语法限定编译器只通过模板匹配 */ template<typename T> void Test1(T a, T b){ cout << "执行了模板函数Test1()" << endl; } void Test2(int a, int b){ cout << "执行了Test2()" << endl; } void Test1(int a, int b){ cout << "执行了普通函数Test1()" << endl; } void Test3(int a, int b){ cout << "执行了普通函数Test3()" << endl; } void ProtectA(){ int a = 1; int b = 2; char c = '3'; //Test1(a, c); 报错 error C2782: “void Test1(T,T)”: 模板 参数“T”不明确 /* 因为 a是int型,c是char型 而函数模板要求两个参数都是T型 就是说两个参数的类型必须一致, 但是 int和char类型不一致 所以报错 */ Test2(a, c);//对于普通函数而言,则可以进行隐式类型转换,所以没有问题 } void ProtectB(){ int a=1,b=2; char c = '3',d='4'; Test1(a, b);//这里调用普通函数 Test1<>(a, b);//这里调用模板函数--规则4 Test1(c, d);//这里调用模板函数--规则3---假设没有模板函数 仍然会调用普通函数 Test3(c, d); } void main(){ ProtectB(); system("pause"); }
相关文章推荐
- VC6.0向VC2010过渡要做的调整
- c语言scanf返回值
- C++ 函数模板一(函数模板定义)
- 1042. Shuffling Machine (20)
- UVA10129 单词 解题报告
- VS2010:error C2061: 语法错误
- 【C/C++】回溯经典算法之-->八皇后问题
- 利用求余判断素数
- 如何开始用 C++ 写一个光栅化渲染器?
- C语言结构体(struct)常见使用方法
- C++,C,java面试例题
- java多态及其与c++的差异
- 关于c++primer不能用字符串字面值构建vector对象
- C语言学习-顺序结构+运算符选讲
- 求两个数的最大公约数
- C++类型转换总结
- C语言中的static
- C++复习要点总结之——友元
- ubuntu12.04 gcc和g++支持 c++11特性
- C++程序员学Python:C与Python进行交互