#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
void q1();
void print(char * a, int b = 0);
const int Len = 40;
struct CandyBar
{
char maker[Len];
double weight;
int calo;
};
void q2();
void setnum(CandyBar & a, char * m = "Millennium Munch", double w = 2.85, int c = 350);
void show(const CandyBar & a);
void q3();
void Upper(string & a);
struct stringy{
char * str;
int ct;
};
void q4();
void set(stringy & a, char * b);
void show(const stringy & a, int i = 1);
void show(const char a[], int i = 1);
void q5();
template<typename T>
T max5(const T a[]);
void q6();
template<typename T>
T maxn(const T a[], int n);
typedef char * charptr;
/*
若写为
template<>
char * maxn(const char * a[], int n);
会报错:template-id 'maxn<>' for 'char* maxn(const char**, int' does not match any template declaration
在模板的定义中, const T 所代表的是一个常量。那么 const char* 是一个常量吗?
不是,它是一个非常量指针(编译器允许改变它的值,让它指向别处),指向一个常量(编译器不允许修改它所指向的内容)。
所以,编译器判定显式特化与函数模板定义不匹配。
正确的写法是:
typedef char* char_ptr;
template<> char_ptr max_e (const char_ptr ar[], int n)
或者写为