#include <iostream>
using namespace std;
template <typename T>
int count(T a[],int n,T value);
int main()
{
// float a[5] = {1.23,2.34,2.34,3.34,4.34};
// float valu = 2.34;
// int c ;
// // c = count(a,5,valu); //没报错
// c = count(a,5,2.34); //报错
// cout << c << endl;
int a[7] = {1,2,3,4,5,5,5};
int b;
b = count(a,7,5);
cout << b << endl;
}
template <typename T>
int count(T a[],int n,T value)
{
int final_result = 0;
for(int i = 0;i < n; i++)
{
if(a[i] == value)
final_result++;
}
return final_result;
}###### 运行结果及报错内容
// c = count(a,5,valu); //没报错
// c = count(a,5,2.34); //报错
这两句,第一句中,a和valu都是float,模板中T对应float类型
第二句中,a是float类型,但是2.34默认是double类型,模板类型T无法完全匹配,所以报错
参数类型的匹配说明:
函数参数中直接写数字的时候,编译器会自动匹配最优类型,如果是2,默认匹配int类型,如果是2.34,默认匹配double类型,不是匹配float类型,因为doble类型比float类型精度更高,编译器会择优处理,2.34默认匹配为double类型
区别在于 一个是变量(valu) 一个是常量(2.34)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!