为什么加了const就模板函数的具体化编译不过?

这是编的过的代码:

 #include <iostream>
using namespace std;
#include <cstring>

template <typename T>
T maxn(T array[], int n);

template<> char* maxn(char* str[], int n);

int main()
{
    int ig[6] = {1,2,3,4,5,0};
    double dg[4] = {1.3, 4.8, 2.8, 3.2};
    char * cg[5] = {
        "alex is cool",
        "amy is nice",
        "dwdw",
        "al",
        "ddd"
    };


    cout << maxn(ig, 6) << endl;
    cout << maxn(dg, 4) << endl;
    cout << maxn(cg, 5) << endl;



    return 0;
}

template <typename T>
T maxn(T array[], int n)
{
    T max = array[0];
    for(int i = 0; i < n; ++i)
    {
        max = (max > array[i] ? max : array[i]);
    }

    return max;
}


template<> char* maxn(char* str[], int n)
{
    char * longest = str[0];
    for(int i = 0; i < n ; ++i)
    {
        if(strlen(longest) < strlen(str[i]))
        {
            longest = str[i];
        }
    }

    return longest;
}

这是编不过的代码:

#include <iostream>
using namespace std;
#include <cstring>

template <typename T>
T maxn(const T array[], int n);

template<> char* maxn(const char* str[], int n);

int main()
{
    int ig[6] = {1,2,3,4,5,0};
    double dg[4] = {1.3, 4.8, 2.8, 3.2};
    char * cg[5] = {
        "alex is cool",
        "amy is nice",
        "dwdw",
        "al",
        "ddd"
    };


    cout << maxn(ig, 6) << endl;
    cout << maxn(dg, 4) << endl;
    cout << maxn(cg, 5) << endl;



    return 0;
}

template <typename T>
T maxn(const T array[], int n)
{
    T max = array[0];
    for(int i = 0; i < n; ++i)
    {
        max = (max > array[i] ? max : array[i]);
    }

    return max;
}


template<> char* maxn(const char* str[], int n)
{
    char * longest = str[0];
    for(int i = 0; i < n ; ++i)
    {
        if(strlen(longest) < strlen(str[i]))
        {
            longest = str[i];
        }
    }

    return longest;
}

#include
using namespace std;
// #include

template
T maxn(const T array[], int n);

template<> const char* maxn(const char* const str[], int n);

int main()
{
int ig[6] = {1, 2, 3, 4, 5, 0};
double dg[4] = {1.3, 4.8, 2.8, 3.2};
const char * cg[5] = { //不加const是不会调用特化的模版的
"alex is cool",
"amy is nice",
"dwdw",
"al",
"ddd"
};

cout << maxn(ig, 6) << endl;
cout << maxn(dg, 4) << endl;
cout << maxn(cg, 5) << endl;



return 0;

}

template
T maxn(const T array[], int n)
{
T max = array[0];
for (int i = 0; i < n; ++i)
{
max = (max > array[i] ? max : array[i]);
}

return max;

}

template<> const char* maxn(const char* const str[], int n)
{
const char * longest = str[0];
for (int i = 0; i < n ; ++i)
{
if (strlen(longest) < strlen(str[i]))
{
longest = str[i];
}
}

return longest;

}


我的问题也一样,昨晚回家做了这一个c++ primer plus的编程练习第六题,应该和你的是一样,我也这么加const,可就是编译不过

加了const 模板T就变成了 const int或const doble 。在函数中你使用 Tmax=arr[0];max就是一个const

常量,后续你又修改max的值。这当然编译通不过