函数重载与函数模板
函数重载
函数模板
#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没经历运算的可以保留很多原属性
-
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;
}