weixin_43306709 2022-02-12 17:34 采纳率: 77.3%
浏览 31
已结题

请问下面这两个报错与没报错的代码有啥区别啊,有人能细讲一下吗?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#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;

}###### 运行结果及报错内容

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 关注

    // 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类型

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月20日
  • 已采纳回答 2月12日
  • 创建了问题 2月12日