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 ++语言中的是一个错误吗?
答案 0 :(得分:11)
因为c
的类型不是char [2]
,所以它与第一个不匹配
功能。在模板案例中,T
解析为char [2]
,这意味着
最终的参数类型是char (&a)[2][2]
。 (你可以想到它
因为T
等同于typedef
到char[2]
,并且
根据它扩展参数类型。)
答案 1 :(得分:1)
T
将解析为 char*
char[2]
,因此您的模板化功能不会出现任何问题。
编辑:感谢詹姆斯指出这一点。