c – 当普通函数没有时,为什么模板函数接收带有1D参考的2D数组
发布时间:2020-12-16 05:02:57 所属栏目:百科 来源:网络整理
导读:void fun (char (a)[2]) // 1D reference{}templatetypename T,int SIZEvoid funT (T (a)[SIZE]) // 1D reference{}int main (){ char c[2][2]; // 2D array fun(c); // error funT(c); // ok !!!??} 我可以期待fun()给出错误,但是怎么来funT()工作正常! 这
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的类型不是char [2],所以它与第一个不匹配 功能.在模板的情况下,T解析为char [2],这意味着 最终的参数类型是char(& a)[2] [2]. (你可以想到它 因为T成为char [2]的typedef的等价物,并且 根据它扩展参数类型.)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |