[C++][模板]char*作为模板实参时的一个问题-创新互联

当char*作为模板时,不同长度的字符串可能会被编译器认为是不同的两种模板类型实参,即:

为蒙阴等地区用户提供了全套网页设计制作服务,及蒙阴网站建设行业解决方案。主营业务为网站制作、成都网站制作、蒙阴网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

char* s1 = "abcd";

char* s2 = "efghijkl";

templace

int max(T const& t1, T const& t2)

{

  return (t1 >t2) ? : t1 : t2;

int main()

{

  int maxval = max(s1, s2);  // 编译报错,不同类型的实参
}

当使用s1和s2作为max模板函数的实参演绎的时候,编译器会将s1的类型认为是char[5],而s2的类型认为是char[9],而max模板函数只接受一种类型作为模板参数,所以此处会报错。

但是如果将模板函数申明中的引用去除:

int max(T const t1, T const t2)

{

  return (t1 >t2) ? : t1 : t2;

编译则可以通过,没有问题。

因为对于非应用类型的模板函数参数,编译器会做数组到指针的类型转换(decay),通过转换后,两个模板函数实参类型都变为char*了。

该范例和注意点来自《C++ Template》第52页

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:[C++][模板]char*作为模板实参时的一个问题-创新互联
标题链接:http://azwzsj.com/article/pjsoi.html