码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 函数模板二(函数模板重载)

时间:2016-07-09 22:05:50      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

//函数模板重载
#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");
}

 

C++ 函数模板二(函数模板重载)

标签:

原文地址:http://www.cnblogs.com/zhanggaofeng/p/5656705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!