鱼C论坛

 找回密码
 立即注册
查看: 1309|回复: 0

[技术交流] C++旅程第10站——函数模板2

[复制链接]
发表于 2020-5-26 22:02:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
I call architecture frozen music.
                                                                                      普通函数与函数模板
普通函数与函数模板的区别:
1、普通函数->可以发生隐式类型转换;
2、函数模板->用自动类型推导,不可以发生隐式类型转换
3、函数模板->用显示指定类型,可以发生隐式类型转换
#include<iostream>

using namespace std;

int add1(int a, int b)
{
        return a + b;
}

template<class T> 
T add2(T a,T b)
{
        return a+b;
}

void test1()
{
        int a = 11;
        int b = 22;
        int c = 'c';
        
        cout << add1(a,b) << endl;
        cout << add1(a,c) << endl;
        
        //自动类型转换---不会发生隐式类型转换的 
        cout << add2(a,c) << endl;
        
        //显示指定类型----会发生隐式类型转换 
        cout << add2<int>(a,c) << endl;
}


int main()
{
        test1();
        
        return 0;
}
调用规则:
1、如果函数模板和普通函数都可以实现,优先调用普通函数
2、可以通过空模板参数列表来强制调用函数模板
3、函数模板也可以发生重载
4、如果函数模板可以产生更好的匹配,优先调用函数模板
#include<iostream>

using namespace std;

void add1(int a, int b)
{
        cout << "普通函数调用!!!!!!!!!" << endl;
}

template<class T> 
T add1(T a,T b)
{
        cout << "函数模板调用!!!!!!!!!" << endl; 
}

template<class T> 
T add1(T a,T b,T c)
{
        cout << "重载的函数模板调用!!!!!!!!!" << endl; 
}

void test1()
{
        int a = 11;
        int b = 22;
        int c = 33;
        
        //如果函数模板和普通函数都可以实现,优先调用普通函数
        add1(a,b);
        
        //通过空模板参数列表,强制调用函数模板
        add1<>(a,b); 
        
        //函数模板也可以发生重载
        add1(a,b,c);
        
        //如果函数模板可以产生更好的匹配,优先调用函数模板
        char p = 'a';
        char q = 'b';
        
        add1(p,q);
}


int main()
{
        test1();
        
        return 0;
}
                                            渣渣在线求指导

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表