17函数重载与函数模板

函数重载与函数模板

在这里插入图片描述

函数重载

函数模板

在这里插入图片描述

#include <iostream>
template <typename type1>
type1 ave(type1 a, type1 b, type1 c)
{
    std::cout<<"(sizeof(type1))"<<sizeof(type1);
    return (a + b + c) / 3;
}
int main()
{
    std::cout << "ave = " << ave(11, 21, 31) << std::endl;
    std::cout << "ave = " << ave((char)11, (char)11, (char)11) << std::endl;
    system("pause");
    return 0;
}

在这里插入图片描述

函数模板的重载

在这里插入图片描述
在这里插入图片描述

auto的特殊声明:

在这里插入图片描述

auto特殊性质:

在这里插入图片描述
在这里插入图片描述

decltype(类型推断)

在这里插入图片描述

decltype推断三原则

decltype没经历运算的可以保留很多原属性

-在这里插入图片描述

  • decltype经历过运算会根据运算结果有没内存地址的来判断

    tip:(左值有内存地址,右值是临时的内存地址)

在这里插入图片描述

  • decltype是可以复制函数类型的

  • 在这里插入图片描述
    在这里插入图片描述

auto和decltpye联合利用(拖尾函数中用)

在这里插入图片描述

auto bigger(int &a, int &b) -> decltype(a > b ? a : b) // 拖尾函数
{
    return a > b ? a : b;
}
int main()
{
    int a{600};
    int b{400};
    decltype(a > b ? a : b) x = (a > b ? a : b);
    std::cout << x << std::endl;
    system("pause");
    return 0;
}

在这里插入图片描述

推断函数返回值类型

在这里插入图片描述

推断是float而不是float&

在这里插入图片描述

函数的模板参数

参数默认值(两种用法)

在这里插入图片描述
在这里插入图片描述

非类型参数指定

在这里插入图片描述

巧用非类型参数实现处理固定大小的数组

在这里插入图片描述

#include <iostream>
template<typename T1,short count>
T1 ave(T1(&ary)[count])
{
    float all{0};
    for(int i=0; i<count; i++){
        all +=ary[i];
    }
    return (all/count);
}
int main()
{
    float a[4]{1,2,3,4};
    std::cout<<ave(a)<<std::endl;
    system("pause");
    return 0;
}

函数模板的本质(牺牲了资源)

在这里插入图片描述

调用一次函数就生成一个函数(不会重复生成/节约资源)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值