C++非类型模板参数

2025-05-12 04:52:15
推荐回答(1个)
回答(1):

你的形参是数组引用,什么是引用,什么是数组型。如果你懂这2个概念,这个问题你就懂了,引用在这里是取得数组整体的身份,数组的型其实在这里并不是单纯的char*,而是char+数组大小,你的形参可以这样简单理解:char (&a)[n]=char b[m];这不合法的写法,仅仅是作分析用,很明显看出a是个引用名,对应的是b,b是代表一个数组大小为m的字符数组,所以a也是代表这样大小的数组,那么必然有n=m,这就是为什么能推导出N=3,M=4l ,如果你的形参不是引用方式:compare(const char pa[N],const char p2[M]);那么就无法推断,因为N和M实际上来说是会被编译器忽略的,即你正常使用这样的定义时:void fun(int a[5]);这个5实际上没有任何作用的,a也会退化成一个int*指针,并不能反映数组的身份,至于为什么这样的,嗯,应该问标准的设计者(也许是为了兼容可传入指针型的实参?注意指向数组的指针是相当于二级指针了(而且对于内层指针是限定数组大小了:指向一维数组的指针:int (*p)[5]),这里我们想要的是一级指针。。然而不知道该如何达到。。。)。。。。