问题描述
||
void fun (char (&a)[2]) // 1D reference
{}
template<typename T,int SIZE>
void funT (T (&a)[SIZE]) // 1D reference
{}
int main ()
{
char c[2][2]; // 2D array
fun(c); // error
funT(c); // ok !!!??
}
我可以预见fun()
会出错,但是funT()
会如何工作呢!
标准中是否有关于此类行为的参考?还是C ++语言中的错误?
解决方法
因为
c
的类型不是char [2]
,所以它与第一个不匹配
功能。在模板的情况下,“ 5”解析为“ 4”,这意味着
最终的参数类型是char (&a)[2][2]
。 (你可以想到的
因为ѭ5等于ѭ9到ѭ10,并且
以此扩展参数类型。)
,ѭ5将解析为char*
char[2]
,因此模板化函数应该没有任何问题。
编辑:感谢詹姆斯指出这一点。